栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于发送请求 json格式字段名 首字母大小写 那点事

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于发送请求 json格式字段名 首字母大小写 那点事

分享小楊日常遇到的bug
通过RestTemplate发送post请求,请求体是json类型…由于之前传输json完全按照java命名规范来的(首字母小写,驼峰)…所以从来也没深入了解过这个东西…但这次对方系统需要全是大写的字段名,我就发现,json居然把我的首字母转成了小写…于是我…就又学疏才浅了…经过我的不懈百度与请教大佬,终于解决了问题…不多废话…直接上解决方案。

解决方案1:
直接使用GSON,gson直接用你的字段名。
注:因GSON使用反射,性能较低

解决方案2:
通过对字段和get方法添加注解,具体注解我就不写了…因为我感觉此方法不太实用…我有很多类…类里又有很多成员变量…要是用这个方法我的人凉了一半…所以我个人不推荐

解决方案3(jackson):
先总结:只需要给类加一个注解,科普下jackson扫描方案:

  1. 所有被public修饰的字段(成员变量);
  2. 所有被public修饰的getter(即形如“getXxx()”的方法);
  3. 所有被public修饰的setter(即形如“setXxx(value)”的方法)

由于我的成员属性都是私有的,所以Jackson是通过我的get方法设置的字段名,而java的内省机制,导致我字段名首字母小写。

   内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。 
 一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量,通过去掉set方法前缀,然后取剩余部分,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小写。

这就是导致我首字母小写的根本原因。现在说下我的解决方案:

@JsonAutoDetect(fieldVisibility= JsonAutoDetect.Visibility.ANY,getterVisibility= JsonAutoDetect.Visibility.NONE)
//这个注解就是将我的成员变量设置为可见的并取消get方法的检测。
//此注解 注在相应的类上即可

解决方案四:
将需要传输的对象转成map。
此解决方案有两种实现方式:

  1. 通过反射将传输对象封装在map中
  2. 将需要传输的对象转成json,再通过json转map的工具类转成map,在循环递归map…将所有的key的首字母变成大写的。
    以上两种方法最后都需要将map转成json。

我个人喜欢第三种方法,虽然说也有点麻烦,但是不用动脑子…
如果有大佬有更好的解决方案 希望可以分享给我们~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/340615.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号