驼峰好用但有🐖
平时写接口时大部分都是驼峰对吧,有好兄弟Jackson去序列化出userName,userId等这样舒服的字段返回,但是对接接口时居然有全大写或者大写加下划线,我大呼mmp
当对面需要接收的json中有全大写怎么办?jackson会把下划线前的大写都转成小写
@JsonProperty
在实体字段上加上@JsonProperty可以让Jackson忽略这个字段进行转换驼峰保留原汁原味的名称
引出问题:
理论看起来很棒棒但是,咦?怎么传出来两个字段
例:
{
"USER_NAME":"admin",
"user_NAME":"admin"
}
WTF!仔细百谷歌度了一番后才知道Jackson序列化不仅会对字段下手还会对getter和setter下手,所以传出来会出现两个字段
扫噶,那么在字段的getter个setter上加上@JsonIgnore 告诉jackson,前面的方法不是那该看的不就大功告成了!
你真是个小天才,但是在如今谁还写一个个写getter和setter方法啊啊啊!!!!
-
java使用了 lombok 毒瘤的看这里
百谷歌度后得到的答案:在实体类上加上这种注解
@Getter(onMethod_ = {@JsonIgnore}) @Setter(onMethod_ = {@JsonIgnore})
当你复制粘贴后:
- wtf?这是什么写法阿伟,IDEA都报错了,你咋是个废物
然鹅这种写法是Java承认的IDEA不承认罢了,用javac可以成功编译的
运行一看ojbk!终于解决了坑壁序列化,但是你认为这就完事了?一般观众确实结束了,可以走了
但是你实在受不了IDEA这大大的红线,于是翻看Jackson的api发现… -
我一个Kotlin用户怎么可能使用lombok毒瘤那怎么办腻
在一个Kotlin用户和JAVA用户叠加态的码农来说上面的方法太不靠谱了,于是也翻看了Jackson的api发现…
尼玛的本来就有这种注解啊
@JsonAutoDetect
直接在实体类上加上:
@JsonAutoDetect(
fieldVisibility = JsonAutoDetect.Visibility.ANY, //表示jackson针对每个字段不管你是public,private还是protected,拿来吧你
getterVisibility = JsonAutoDetect.Visibility.NONE, //表示jackson对于getter方法不感兴趣放过姨妈
setterVisibility = JsonAutoDetect.Visibility.NONE, //表示jackson对于setter方法不感兴趣放过姨妈
)
啊,简单粗暴我喜欢,同时解决了IDEA报错和kt的烦恼
ps:
传出值只要让Jackson忽略getter就行,
但是如果你用了swagger会发现入参也变成双倍的入参那么也需要忽略setter