首页
归档
留言
广告合作
友链
美女主播
Search
1
博瑞GE车机升级/降级
5,146 阅读
2
Mac打印机设置黑白打印
4,517 阅读
3
修改elementUI中el-table树形结构图标
4,516 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,351 阅读
5
intelliJ Idea 2022.2.X破解
4,060 阅读
Java
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Spring Cloud
Mac
mybatis
WordPress
Nacos
Spring Cloud Alibaba
Mybatis-Plus
jQuery
Java Script
asp.net
微信小程序
Sentinel
UniApp
MySQL
asp.net core
IntelliJ IDEA
Jpa
树莓派
Laughing
累计撰写
570
篇文章
累计收到
1,424
条评论
首页
栏目
Java
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
广告合作
友链
美女主播
搜索到
1
篇与
的结果
2022-11-06
Jackson反序列化时忽略某些属性的方法
在开发接口时,出于某些目的(比如有些字段我要设置默认值,不能受入参的影响),我们在入参字符串序列化成实体时,可能需要忽略某些属性。我们要达到的目的非常简单,一个用户类User.java,我们要达到的目的有两个:(1)控制序列化时,忽略name属性。(2)控制反序列化是,忽略name属性。一、@JsonIgnore注解当我们想控制是一个实体在序列化时,忽略某些属性,我们第一个想到的也许就是@JsonIgnore注解了,@JsonIgnore注解能控制实体在序列化时,忽略某些属性,但是无法控制实体在反序列化时忽略的属性。先来看一下我们测试用的User.java类。public class User implements Serializable { private String code; @JsonIgnore private String name; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } }1.1、序列化我们先试一下序列化,看看name属性能否在序列化时自动忽略掉。测试方法也非常简单ObjectMapper objectMapper = new ObjectMapper(); User user = new User(); user.setCode("code123"); user.setName("name123"); System.out.println(objectMapper.writeValueAsString(user));可以看到,name属性确实忽略了,也就是这个注解针对序列化是生效的。1.2、反序列化序列化时候没问题,那么反序列化时候是否也没问题呢,我们接着往下看。String userStr = "{\"code\":\"code123\",\"name\":\"name123\"}"; User user1 = objectMapper.readValue(userStr, User.class);这个时候我们不能在序列化输出显示了,我们调试看一下。我们可以看到,也是能够正常忽略掉的。但是,今天在项目开发时,我使用了同样的方法,发现@JsonIgnore注解没有起作用,但是实体类是这么样的@Data @NoArgsConstructor public class User implements Serializable { private String code; @JsonProperty(value = "name") @JsonIgnore private String name; @JsonProperty(value = "billCateProp") @JsonIgnore @JSONField(deserialize = false) private String billCateProp; @JsonFormat(pattern = "yyyy-MM-dd") private Date date; }怀疑了Data注解,也怀疑了@JsonProperty与@JsonIgnore注解冲突,甚至是属性Camel命名等,但是同样的代码,我拿到别的地方也有没有再现问题,所以终究也不知道是什么原因导致的。2、@JsonProperty@JsonIgnore的问题没有解决,只能另辟蹊径,最终发现@JsonIgnore注解有个access属性,通过access属性解决了问题,在反序列化时,不会再读取忽略的字段,遂将代码调整如下 @JsonProperty(value = "billCateProp",access = JsonProperty.Access.READ_ONLY) // @JsonIgnore @JSONField(deserialize = false) private String billCateProp;JsonProperty.Access.READ_ONLY代表反序列化是忽略字段。JsonProperty.Access.WRITE_ONLY代表序列化时忽略字段。@JsonIgnore失效的问题,最终也没找到答案,有知道的童鞋不妨留言说明一下。
2022年11月06日
1,490 阅读
0 评论
1 点赞