Jackson 转换JSON,SpringMVC ajax 输出,当值为null或者空不输出字段@JsonInclude

JSON 2017-09-07 21:37:02 36704

当我们提供接口的时候,  Ajax  返回的时候,当对象在转换  JSON  (序列化)的时候,值为Null 或者为“” 的字段还是输出来了。看上去不优雅。

现在我叙述三种方式来控制这种情况。

注解的方式( @JsonInclude(JsonInclude.Include.NON_EMPTY))

通过@JsonInclude 注解来标记,但是值的可选项有四类。

  1. Include.Include.ALWAYSDefault / 都参与序列化)
  2. Include.NON_DEFAULT(当Value 为默认值的时候不参与,如Int a; a=0 的时候不参与)
  3. Include.NON_EMPTY(当Value “” 或者null 不输出)
  4. Include.NON_NULL(当Value null 不输出)

注解使用如下:

... ...

//如果是null 和 “” 不返回
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private T data;

... ...

我的对象定义(其实就是一个API接口的返回对象):

public class APIResult<T> implements Serializable {
    //状态
    private Integer status;
    //描述
    private String message;

    //如果是null 不返回
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private T data;
    /*** getter / setter***/
}

我的前端返回值:

{"status":200,"message":"success"}

如上,基本达到我的要求了。

代码方式:

ObjectMapper mapper = new ObjectMapper();
//null不序列化
mapper.setSerializationInclusion(Include.NON_NULL); 

Demo demo = new Demo(200,"",null); 
String json = mapper.writeValueAsString(demo); 
System.out.println(json);
//结果:{"st":200,"name":""} 为null的属性没输出。

Spring配置文件实现

当我们整个项目都需要某一种规则的时候,那么我们就采用配置文件配置。

先还是上一下  Jackson  的  Maven  配置:

    <dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-core</artifactId>  
        <version>${jackson.version}</version>  
    </dependency>  
      
    <dependency>  
        <groupId>com.fasterxml.jackson.core</groupId>  
        <artifactId>jackson-databind</artifactId>  
        <version>${jackson.version}</version>  
    </dependency>  

再来一个XML配置:

<bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">   
	<property name="serializationInclusion">  
		<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>  
	</property>  
</bean>
<mvc:annotation-driven>  
	<mvc:message-converters>  
		<bean  
			class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
			<property name="objectMapper" ref="objectMapper" />  
		</bean>  
	</mvc:message-converters>  
</mvc:annotation-driven>

其实所有的姿势都是针对  Jackson  提供给我们的入口“JsonInclude.Include” 来处理的。所以只要记住最上面讲的几个级别就可以了。

其实这些都是一些基础知识,我只是整合下,后面要丰富首页的内容。

版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/248.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ...
Java 文字转图片输出,Java 输出透明背景图片,Java文字转图片防爬虫
json对象与json字符串的转换方法
Java API接口返回不是JSON的解决方案,SpringMVC返回JSON配置。
苹果电脑Mac怎么恢复厂系统?苹果系统怎么重装系统?
使用zxing解析二维码抛com.google.zxing.NotFoundException 解决方案
GZIP压缩JSONJSON压缩
cpu资源采集.json
SQL Server 对JSON的支持
json 解析与生成工具类 ,JSON操作讲解(附件)
最新文章
文件上传漏洞与防御 1548
前端构建工具选型指南:Webpack、Vite、Rollup、esbuild 深度对比 494
物联网时代2026年时序数据库选型指南 507
SaaS行业面临AI挑战:从“无限复用”到“灵活适应” 683
神经网络:从构造到模型训练全链路解析 554
一文吃透 Redis 核心存储结构:ziplist、listpack 与哈希表扩容 / 并发查询 982
Linux sudo提权完整指南:从基础用法到生产级安全配置 281
XSS 和 CSRF 的本质区别及开发防御全解析 390
JVM垃圾回收(GC)全维度解析:从原理到调优实战 420
Linux动静态库与ELF加载全解析:从实操制作到底层原理 539
最热文章
免费天气API,天气JSON API,不限次数获取十五天的天气预报 771514
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 708851
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 679438
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 562378
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 512346
Elasticsearch教程(四) elasticsearch head 插件安装和使用 484468
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 301586
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 247158
Elasticsearch教程(一),全程直播(小白级别) 232831
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 228099
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...