在开发过程中,定义了字段的类型为Integer ,当数据为空时,值应该为null ,且调试时也正常,返回到前端或者在postman中展示缺变成了-1, 此时快速解决办法可在对应属性上增加注解

@JsonSerialize(nullsUsing = NullSerializer.class)

问题原因,类在序列化时进行了数据更改,(以Integer值转换异常为例 )排查思路如下:

项目内的controller中返回数据使用的注解是@RestController,而@RestController默认使用是jackson来进行对象和字符串的转换,(开发中的项目)对返回的对象进行了封装,在封装后的代码中对默认值为空的进行了赋值操作,见下图

 

 在原始包com.fasterxml.jackson.core.json中提供多种的返回数值类型的方法,故可根据项目需要进行封装或更改。或者直接在使用注解@JsonSerialize(nullsUsing = NullSerializer.class)满足个性化需求。

----------------------------------------------------------------

下面是搜集的类属性的一些其他注解和它的解释以及描述
数据隐藏: 我们在进行数据返回的时候肯定是有些属性不希望前端可以获取到,或者是某些数据为空的时候前端要求不必进行回传,那么这时候我们就可以进行属性的隐藏。
    @JsonIgnore:使用在某个属性上,这样在序列化和反序列化的时候都会忽略这个属性,最直接的效果就是返回的JSON属性是没有这个属性的,一般作用于密码这系列的属性。
    @JsonInclude:使用在某个属性上,配合它的属性Value=JsonInclude.Include.NON_NULL,表示的是如果这个属性的属性值为空那么在返回前端的时候不可见。
    @JsonProperty:使用在某个属性上,这个注解有两个作用,第一是修改返回JSON数据的时候key值为value指定值,第二个作用是配合属性access=JsonProperty.Access.WRITE_ONLY表示属性只可以进行序列化而不能进行反序列化,直观效果就是返回的数据没有该属性。
    @JsonIgnoreProperties:作用在类声明处,它和@JsonIgnore注解的区别就是可以对多个属性作用,直接在value属性后面使用大括号逗号隔开即可,它的ignoreUnknow属性为true表示忽略未定义的属性。
日期:
    我们直接使用日期出来的格式必然不是我们想要的,那么我们可以使用注解:@JsonFormat配合上属性pattern标志事件格式,timezone是时区,local是区域。在这里必须强调的是这是把日期格式化为String,一般应用在后台向前端传递数据,如果是前端的String格式需要解析为日期格式我们可以使用@DateTimeFormat即可。
排序:
    有时候为了规范好看我们也需要让属性按照一定顺序进行排列,这时候我们就使用@JsonPropertyOrder这个注解,它的属性alphabetic默认值是false,我们设置为true即可。
大概的Json数据处理使用到的注解基本上也就这些了,当然其他功能更强大的注解大家有兴趣可以在下去自己学习,查看一个注解的使用方法和效果最好的办法就是写Demo。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐