Jackson自定义序列化器


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;

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM