使用jackson来进行序列化时,null对象如何转换为空对象“{}”

背景描述

前端要求返回的对象为null时,对每个数据的解析要做判断,方便前端开发需要将null转换为{}

{
"data":null
}

处理为

{
"data":{}
}

解决方法

step 1 创建null值序列化处理类

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.IOException;

/**
 * 使用方法: @JsonSerialize(nullsUsing = NullObjectToEmptyObjectSerializer.class)
 * 效果: null对象会被转换为空对象 {}
 *  请务必使用nullsUsing 表示仅当值为null时, 才会进入本类 serialize 方法
 */
public class NullObjectToEmptyObjectSerializer extends JsonSerializer<Object> {
    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        //创建空对象节点 效果为{}
        ObjectNode objectNode = objectMapper.createObjectNode();
        //如果处理的字段为数组,则需要创建数组节点 []
        //ArrayNode arrayNode = objectMapper.createArrayNode();
        jsonGenerator.writeObject(objectNode);
    }
}

step 2 给需要转换的字段加上注解

@JsonSerialize(nullsUsing = NullObjectToEmptyObjectSerializer.class)
private Object data;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容