驼峰好用但有🐖

平时写接口时大部分都是驼峰对吧,有好兄弟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方法啊啊啊!!!!
  1. java使用了 lombok 毒瘤的看这里

    百谷歌度后得到的答案:在实体类上加上这种注解

    @Getter(onMethod_ = {@JsonIgnore})
    @Setter(onMethod_ = {@JsonIgnore})
    

    当你复制粘贴后:
    - wtf?这是什么写法阿伟,IDEA都报错了,你咋是个废物
    然鹅这种写法是Java承认的IDEA不承认罢了,用javac可以成功编译的
    运行一看ojbk!终于解决了坑壁序列化,但是你认为这就完事了?一般观众确实结束了,可以走了
    但是你实在受不了IDEA这大大的红线,于是翻看Jackson的api发现…

  2. 我一个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