@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderDTO { private String orderId;
@JsonProperty("name")
private String buyerName;
@JsonProperty("phone")
private String buyerPhone;
@JsonProperty("address")
private String buyerAddress;
@JsonProperty("openid")
private String buyerOpenid;
private BigDecimal orderAmount; /**
* 订单状态,默认是0
*/
private Integer orderStatus; /**
* 支付状态
*/
private Integer payStatus; @JsonSerialize(using = Date2LongSerializer.class)
private Timestamp createTime;
@JsonSerialize(using = Date2LongSerializer.class)
private Timestamp updateTime; @JsonProperty("items")
List<OrderDetailEntity> orderDetailList; }

@JsonInclude(JsonInclude.Include.NON_NULL)表示,如果值为null,则不返回

全局jsckson配置

spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://192.168.41.60/sell?characterEncoding=utf-8&useSSL=false
jpa:
show-sql: true
jackson:
default-property-inclusion: non_null # 全局jackson配置

JSON库 Jackson 常用注解介绍

Jackson JSON 框架中包含了大量的注解来让我们可以干预 Jackson 的 JSON 处理过程,
例如我们可以通过注解指定 java pojo 的某些属性在生成 json 时被忽略。。本文主要介绍如何使用 Jackson 提供的注解。
Jackson注解主要分成三类,一是只在序列化时生效的注解;二是只在反序列化时候生效的注解;三是两种情况下都生效的注解。

一: 两种情况下都有效的注解

1. @JsonIgnore 作用域属性或方法上

@JsonIgnore 用来告诉 Jackson 在处理时忽略该注解标注的 java pojo 属性,
不管是将 java 对象转换成 json 字符串,还是将 json 字符串转换成 java 对象。

@Data
public class SellerInfoEntity { private String id;
private String username;
private String password;
private String openid; @JsonIgnore
private Timestamp createTime;
@JsonIgnore
private Timestamp updateTime; public SellerInfoEntity() {
} public SellerInfoEntity(String id, String username, String password, String openid) {
this.id = id;
this.username = username;
this.password = password;
this.openid = openid;
}
}

2. @JsonIgnoreProperties 作用在类上

@JsonIgnoreProperties 和 @JsonIgnore 的作用相同,都是告诉 Jackson 该忽略哪些属性,
不同之处是 @JsonIgnoreProperties 是类级别的,并且可以同时指定多个属性。

@Data
@JsonIgnoreProperties(value = {"createTime","updateTime"})
public class SellerInfoEntity { private String id;
private String username;
private String password;
private String openid; private Timestamp createTime;
private Timestamp updateTime; public SellerInfoEntity() {
} public SellerInfoEntity(String id, String username, String password, String openid) {
this.id = id;
this.username = username;
this.password = password;
this.openid = openid;
}
}

使用Spring Boot快速搭建Controller进行测试:

@RestController
@RequestMapping("/jackson")
public class TestJackson {
@RequestMapping("test1")
public Result test1(){ SellerInfoEntity entity = new SellerInfoEntity("1","user1","123456","openid"); return new Result(MyResultEnum.SUCCESS,entity); }
}

访问: localhost/sell/jackson/test1

使用注解前:返回值

{
"code": 0,
"msg": "成功",
"data": {
"id": "1",
"username": "user1",
"password": "123456",
"openid": "openid",
"createTime": null,
"updateTime": null
}
}

使用注解后:返回值

{
"code": 0,
"msg": "成功",
"data": {
"id": "1",
"username": "user1",
"password": "123456",
"openid": "openid",
}
}

3. @JsonIgnoreType

@JsonIgnoreType 标注在类上,当其他类有该类作为属性时,该属性将被忽略。

package org.lifw.jackosn.annotation;
import com.fasterxml.jackson.annotation.JsonIgnoreType;
@JsonIgnoreType
public class SomeOtherEntity {
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
public class SomeEntity {
private String name;
private String desc;
private SomeOtherEntity entity;
}

SomeEntity 中的 entity 属性在json处理时会被忽略。

4. @JsonProperty

@JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”aaa”},
而java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用。

public class SomeEntity {
@JsonProperty("user_name")
private String userName;
// ...
}

二、只在序列化情况下生效的注解

1. @JsonPropertyOrder

在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonPropertyOrder 可以指定属性在 json 字符串中的顺序。

2. @JsonInclude

在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonInclude 注解可以控制在哪些情况下才将被注解的属性转换成 json,例如只有属性不为 null 时。

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SellerInfoEntity { private String id;
private String username; @JsonInclude(JsonInclude.Include.NON_EMPTY)
private String password;
private String openid; private Timestamp createTime;
private Timestamp updateTime; public SellerInfoEntity() {
} public SellerInfoEntity(String id, String username, String password, String openid) {
this.id = id;
this.username = username;
this.password = password;
this.openid = openid;
}
}

Controller 测试

@RestController
@RequestMapping("/jackson")
public class TestJackson { @RequestMapping("test1")
public Result test1(){ SellerInfoEntity entity = new SellerInfoEntity("1","user1","","openid"); return new Result(MyResultEnum.SUCCESS,entity);
}
}

结果:

{
"code": 0,
"msg": "成功",
"data": {
"id": "1",
"username": "user1",
"openid": "openid"
}
}

上述例子的意思是 SellerInfoEntity 的所有属性只有在不为 null 的时候才被转换成 json,
如果为 null 就被忽略。并且如果password为空字符串也不会被转换.

该注解也可以加在某个字段上。

另外还有很多其它的范围,例如 NON_EMPTY、NON_DEFAULT等

三、是在反序列化情况下生效的注解

1. @JsonSetter

@JsonSetter 标注于 setter 方法上,类似 @JsonProperty ,也可以解决 json 键名称和 java pojo 字段名称不匹配的问题。

public class SomeEntity {
private String desc;
@JsonSetter("description")
public void setDesc(String desc) {
this.desc = desc;
}
}

上述例子中在将 json 字符串转换成 SomeEntity 实例时,会将 json 字符串中的 description 字段赋值给 SomeEntity 的 desc 属性。

jackSon注解– @JsonInclude 注解不返回null值字段的更多相关文章

  1. copyProperties 忽略null值字段

    在做项目时遇到需要copy两个对象之间的属性值,但是有源对象有null值,在使用BeanUtils来copy时null值会覆盖目标对象的同名字段属性值,然后采用以下方法找到null值字段,然后忽略: ...

  2. spring配置jackson不返回null值

    #json不返回null spring.jackson.default-property-inclusion=non_null

  3. Flash的坑之ExternalInterface.call只返回null值的解决办法

    flash坑太多了,要确保能有效的使用ExternalInterface.call调用js的话,需要两个条件: 1.allowScriptAccess="always" 2.id= ...

  4. select sum也会返回null值

    SELECT  SUM(detail.VAL)  FROM   AI_SDP_ORDER_MONTH_DETAIL_201706    detail 如果所有的VAL都是null的话,或者根本就不存在 ...

  5. 使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法

    当配置mybatis返回int类型时 select id="getUserIdByName" parameterType="string" resultType ...

  6. @JsonInclude注解,RestTemplate传输值为null的属性,利用FastJson将属性中有空值null的对象转化成Json字符串

    一个pojo类: import lombok.Data; @Data public class Friend { private String name; private int age; priva ...

  7. 如何让access空值变成0?(确切的说是让access Null值变成0)

    方法一 if  IsNull(Me.新_退休费) = True Then Me.新_退休费 = 0 方法二 if Nz(Me.原_退休费) = Me.原_退休费 Then Me.原_退休费 = 0 有 ...

  8. TSQL 聚合函数忽略NULL值

    max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...

  9. null值与空值比较

    JAVA中判断字符串或者数值是否为空时,常用到  .equals函数对空值进行判断 例如  values[5]为参数值 "".equals(values[5]) 常在if语句判断中 ...

随机推荐

  1. laydate控制之前的日期不可选择

    laydate.render({ elem: '#start_time', min:0, //,type: 'date' //默认,可不填 }); 只要加一个min参数,就可以控制了.0表示之前的日期 ...

  2. VC异常.简单抛,简单捕获

    1.ZC:始终没有找到,能像Delphi7里面那样能抛 字符串描述 的异常信息.(难道Delphi是这样做的?:在程序的最外围 套了一层异常捕获,然后在获取到异常之后,自己再将异常信息弹出来,我们写的 ...

  3. Qt532.【转】Qt在pro中设置运行时库MT、MTd、MD、MDd,只适合VS版本的Qt

    ZC:具体应该设置 什么参数,可以参看 自己转载的文章:"VC.[转]采用_beginthread__beginthreadex函数创建多线程 - CppSkill - 博客园.html&q ...

  4. java与js交互,相互调用传参

    随着前端技术的发展与H5的广泛使用,移动端采用native+h5的方式越来越多了,对于Android来说就涉及到java与js的交互,相互调用传参等.下面就来看一下java与js交互的简单demo. ...

  5. 为HTML表格添加交互功能------DataTables

    DataTables是一个功能强大的Javascript库,用于为HTML表格添加交互功能,虽然简单性是整个项目的核心设计原则,但入门看起来相当艰巨.但是,采取这些第一步并在您的网站上运行DataTa ...

  6. Linux 各种软件的安装 - svn

    首先感谢这篇博文 https://www.cnblogs.com/mymelon/p/5483215.html 按照他的配置,svn顺利搭好. 1:yum -y install subversion ...

  7. hdu-3366 Passage 概率DP 读懂就能AC hhh

    http://acm.split.hdu.edu.cn/showproblem.php?pid=3366 读题的时候没发现这个P Q 1-P-Q是全集的划分,以为是独立事件,写错了转移方程233 先贪 ...

  8. android -------- Eclipse下的NDK配置环境

    NDK 全称是Native Development Kit,是一个让开发人员在Android应用中嵌入使用本地代码编写的组件的工具集 原生开发工具包 (NDK) 是一组可让您在 Android 应用中 ...

  9. BASE64图片转字符串

    Java代码图片字符串互转 /** * 将base64字符串转成图片 * TODO * @param imgStr base64图片字符串 * @param path 目标输出路径 * @return ...

  10. stylus笔记

    Stylus介绍及特点 基于Node.js的css的预处理框架,其本质上做的事情与 Sass/LESS 等类似, 可以以近似脚本的方式去写CSS代码,创建健壮的.动态的.富有表现力的CSS,默认使用 ...