【Spring Boot-技巧】API返回值去除为NULL的字段

简介
在前后端分离的微服务时代,后端API需要良好的规范。本篇主要将一个数据返回时的一个小技巧-- 过滤为空字段
解决痛点:将有效解决数据传输过程中的流量浪费。
组件简介
Jackson ObjectMapper
通过自定义配置该组件可以选择性序列化返回的JSON。
官方解释
Spring MVC(客户端和服务器端)用于HttpMessageConverters在HTTP交换中协商内容转换。如果Jackson在类路径上,您已经获得了提供的默认转换器Jackson2ObjectMapperBuilder,其中一个实例是为您自动配置的。
Spring Boot还具有一些功能,可以更轻松地自定义此行为。

实战代码

创建配置类
首先创建一个配置类,加入定义为:JacksonConfig
代码清单

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
 * @author Han Yahong<hyhvpn@126.com>
 * @program 51-baojiadan-service
 * @description 返回json空值去掉null和""
 * @create 2018-07-26 11:04
 */
@Configuration
public class JacksonConfig {
    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        return objectMapper;
    }
}

代码解释:以上就是全部代码,通过注解**@Configuration** 注入后可自动配置。

关键点:objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化。
其中枚举属性:JsonInclude.Include.NON_NULL有以下选择:

属性使用场景
Include.Include.ALWAYS默认
Include.NON_DEFAULT属性为默认值不序列化
Include.NON_EMPTY属性为 空("") 或者为 NULL 都不序列化
Include.NON_NULL属性为NULL 不序列化

替换非空

可通过自定义替换原有制定值。代码如下:

public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        // 字段保留,将null值转为""
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object o, JsonGenerator jsonGenerator,
                                  SerializerProvider serializerProvider)
                    throws IOException, JsonProcessingException {
                jsonGenerator.writeString("");
            }
        });
        return objectMapper;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值