Jackson自定義序列化器
自定義Jackson序列化器非常好用,比如數據庫存儲圖片相對地址而接口中需要拼接Http路徑、隱藏手機號中間某幾位、Double保留兩位小數輸出等等。
使用方法也很簡單
- 自定義序列化器,集成JsonSerializer
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.beans.factory.annotation.Value;
import java.io.IOException;
/**
* @author lb
* 補全Url的序列化器
*/
public class ReplenishUrlSerializer extends JsonSerializer<String> {
//Http根地址
@Value("${myProps.fdfsHttpIp}")
private String fdfsHttpIp;
@Override
public void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
if(PublicUtils.isNotEmpty(s)){
//拼接Http根地址與value值
jsonGenerator.writeString(fdfsHttpIp+s);
}
}
}
- 輸出VO類中使用@JsonSerialize指定自定義的序列化器
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @author lb
* VO
*/
@Data
public class CitizenDetailRespVO {
private Long citizenId;
private String collectNum;
//指定序列化器
@JsonFormat(pattern = "yyyy")
private Date year;
//將數據庫中文件的相對地址與程序配置文件中的Http根地址拼接
@JsonSerialize(using = ReplenishUrlSerializer.class)
private String documentPath;
}