使用场景
** 在开发中,有时候某些字段需要特殊处理,比如我们有一个日期字段,当日期为NULL时给前端不返回NULL而返回为其他等信息,就需要自定义字段的序列化。这就是@JsonSerialize的用处 **
1:先写一个指定的处理类
package org.demo.common.json;import com.alibaba.fastjson.JSONObject;
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 java.io.IOException;
import java.util.List;/**** @Description: 序列化工具,将list集合转字符串* @Author: xqf* @Date: 2023-11-25* @Version: V1.0* //**继承JsonSerializer*/
public class ToArraysSerializer extends JsonSerializer<String> {/*** 重写serialize方法**/@Overridepublic void serialize(String object, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {/**自定义处理方式*/List<String> list = JSONObject.parseObject(object, List.class);jsonGenerator.writeObject(list);}}
2:此字段上加上@JsonSerialize注解,并且使用using 属性(表示有值的时候调用ToArraysSerializer处理返回给前端)
/*** 文章内容*/@ApiModelProperty(value = "文章内容")@JsonSerialize(using = ToArraysSerializer.class)private String content;
3:nullsUsing用法与using 一样,当字段为NULL时的自定义序列化方式
/*** 文章内容*/@ApiModelProperty(value = "文章内容")@JsonSerialize(nullsUsing = xxx.class)private String content;