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;
}