java-数据格式化(结果为null,返回前端显示-1)
JsonProperty:使用在某个属性上,这个注解有两个作用,第一是修改返回JSON数据的时候key值为value指定值,第二个作用是配合属性access=JsonProperty.Access.WRITE_ONLY表示属性只可以进行序列化而不能进行反序列化,直观效果就是返回的数据没有该属性。@JsonIgnore:使用在某个属性上,这样在序列化和反序列化的时候都会忽略这个属性,最直接的效果就是
在开发过程中,定义了字段的类型为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。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)