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