zoukankan      html  css  js  c++  java
  • spring boot 接口返回值去掉为null的字段

    现在项目都是前后端分离的,返回的数据都是使用json,但有些接口的返回值存在 null或者"",这种字段不仅影响理解,还浪费带宽,需要统一做一下处理,不返回空字段,或者把NULL转成“”,spring 内置的json处理框架是Jackson,对它配置后可以去除

    Jackson ObjectMapper

    通过自定义配置该组件可以选择性序列化返回的JSON

    通过官网可以知道:https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#howto-customize-the-jackson-objectmapper

    Spring MVC(客户端和服务器端)用于HttpMessageConverters在HTTP交换中协商内容转换。如果Jackson在类路径上,您已经获得了提供的默认转换器Jackson2ObjectMapperBuilder,其中一个实例是为您自动配置的。
    Spring Boot还具有一些功能,可以更轻松地自定义此行为。

    新建配置类:(去掉 null 或 "" 字段)

    package com.zpark.tools;
    
    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 cosmo
     * @Title: JacksonConfig
     * @ProjectName  
     * @Description:  
     * @date  
     */
    
    @Configuration
    public class JacksonConfig {
       
        @Bean
        @Primary
        @ConditionalOnMissingBean(ObjectMapper.class)
        public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
            ObjectMapper objectMapper = builder.createXmlMapper(false).build();
            //通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化,属性为NULL 不序列化
            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            return objectMapper;
        }
        //Include.Include.ALWAYS 默认
        //Include.NON_DEFAULT 属性为默认值不序列化
        //nclude.NON_EMPTY       属性为 空("") 或者为 NULL 都不序列化
        //Include.NON_NULL       属性为NULL 不序列化
    }

    替换非空:

    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
            ObjectMapper objectMapper = builder.createXmlMapper(false).build();
            objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
                @Override
                public void serialize(Object o, JsonGenerator jsonGenerator,SerializerProvider serializerProvider)throws IOException, JsonProcessingException {
                    jsonGenerator.writeString("");
                }
            });
            return objectMapper;
        }
  • 相关阅读:
    Linux下查看使用的是哪种shell的方法汇总【转】
    Shell中的while循环【转】
    shell浅谈之三for、while、until循环【转】
    cpu_relax( )-----对自选循环等待(spin-wait loops)操作的优化【转】
    Linux makefile 教程 非常详细,且易懂【转】
    链表常见的问题【转】
    linux内核同步之信号量、顺序锁、RCU、完成量、关闭中断【转】
    linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁【转】
    关于hrtimer_forward小段代码的分析【转】
    CTP多点触摸协议【转】
  • 原文地址:https://www.cnblogs.com/qinxu/p/10208858.html
Copyright © 2011-2022 走看看