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

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

注解的方式( @JsonInclude(JsonInclude.Include.NON_EMPTY))
通过@JsonInclude 注解来标记,但是值的可选项有四类。
Include.Include.ALWAYS (Default / 都参与序列化)
Include.NON_DEFAULT(当Value 为默认值的时候不参与,如Int a; 当 a=0 的时候不参与)
Include.NON_EMPTY(当Value 为“” 或者null 不输出)
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” 来处理的。所以只要记住最上面讲的几个级别就可以了。

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

Jackson 转换JSON,SpringMVC ajax 输出,当值为null或者空不输出字段@JsonInclude的更多相关文章

  1. Jackson转换JSON例子

    Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...

  2. SpringBoot中使用Fastjson/Jackson对JSON序列化格式化输出的若干问题

    来源 :https://my.oschina.net/Adven/blog/3036567 使用springboot-web编写rest接口,接口需要返回json数据,目前国内比较常用的fastjso ...

  3. Jackson轻易转换JSON

    原文http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html Jackson可以轻松的将Java对象转换成json对象和xml文档,同样 ...

  4. Jackson 框架,轻易转换JSON

    Jackson 框架,轻易转换JSON Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在 ...

  5. Jackson 框架,轻易转换JSON(转)

    Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也 ...

  6. Jackson框架,json转换

    Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...

  7. Jackson 框架,轻易转换JSON【转】

    Jackson 框架,轻易转换JSON Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在 ...

  8. FastJson、Jackson、Gson进行Java对象转换Json细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  9. 【Json】Jackson将json转换成泛型List

    Jackson将json转换成泛型List 获取泛型类型 /** * 获取泛型类型 * * @return */ protected Class<T> getGenericsType() ...

随机推荐

  1. Java文件类

    在Java语言中,无论是目录还是文件,都抽象成java.io.File类 直接上示例吧 java,io,File的常用操作 删除.创建 因为我的e盘里面是没有这个文件的,所以不存在I哦 创建文件: 获 ...

  2. ServletContextListener 详解

    1.首先来看一看源码 该类的源码 public interface ServletContextListener extends EventListener { /** * Receives noti ...

  3. [ 转载 ] Android JNI(一)——NDK与JNI基础

    Android JNI(一)——NDK与JNI基础 隔壁老李头 关注  4.4 2018.05.09 17:15* 字数 5481 阅读 11468评论 8喜欢 140 本系列文章如下: Androi ...

  4. zoj 3640 概率dp

    题意:一只吸血鬼,有n条路给他走,每次他随机走一条路,每条路有个限制,如果当时这个吸血鬼的攻击力大于等于某个值,那么就会花费t天逃出去,否则,花费1天的时间,并且攻击力增加,问他逃出去的期望 用记忆化 ...

  5. hdu 3853 概率dp

    题意:在一个R*C的迷宫里,一个人在最左上角,出口在右下角,在每个格子上,该人有几率向下,向右或者不动,求到出口的期望 现在对概率dp有了更清楚的认识了 设dp[i][j]表示(i,j)到(R,C)需 ...

  6. 使用 IntraWeb (20) - 基本控件之 TIWGrid

    TIWGrid 最终通过 Html Table 呈现; 其每个 Cell 都是一个 TIWGridCell 对象, Cell 对象的 Control 属性非常好, 可以非常方便地嵌入其他控件. TIW ...

  7. FireDAC 下的 Sqlite [2] - 第一个例子

    为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\ ...

  8. HDU 3970 Paint Chain (博弈,SG函数)

    Paint Chain Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. 在 C# 中,如何发现死锁并防止死锁

    在解释死锁如何发生以及如何阻止死锁的过程中,你似乎遇到了问题. 当两个( 最小二) 线程试图获取已经被另一个锁锁定的资源的锁时,就会发生死锁. 线程 1锁定资源 1尝试获取对资源 2的锁定. 同时,线 ...

  10. perl 信号

    来自:http://www.bagualu.net/wordpress/?p=1628 使用signal,能让你的程序功能更丰富.要在Linux下列出所有的signal, 利用kill -l即可. 下 ...