当前位置: 首页 > news >正文

在线员工后台网站建设长岛网站建设

在线员工后台网站建设,长岛网站建设,wordpress远程ftp,淄博网站建设优化上汽参考链接:https://www.baeldung.com/jackson-annotations 遇到的问题 之前和第三方对接#xff0c;返回的接口中的属性名称是拼音字母大写#xff0c;奇怪#xff0c;反序列化的时候好多字段都为空#xff0c;没设置进去。 因为对接前#xff0c;我先用 IntelliJ IDEA …参考链接:https://www.baeldung.com/jackson-annotations 遇到的问题 之前和第三方对接返回的接口中的属性名称是拼音字母大写奇怪反序列化的时候好多字段都为空没设置进去。 因为对接前我先用 IntelliJ IDEA 的 Http Client 工具调试接口返回的属性并不为空但是用 RestTemplate 调用接口反序列化后的字段都为空。跟踪代码后发现在收集反序列化后的对象的属性名称的时候把大写字段名称都改写成了小写字母。而 json 字符串的名称都是大写的但是在 Bean 的属性名称集合中的名称都是小写的自然就匹配不上了。所以反序列化的时候大写字段的值都为空了。 复现问题 下面用一段代码来复现一下 : import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper;/*** author shifengqiang 2023/2/22 16:20*/ public class TestBean {private int id;private String BH;public String getBH() {return BH;}public void setBH(String BH) {this.BH BH;}public int getId() {return id;}public void setId(int id) {this.id id;}Overridepublic String toString() {return {\TestBean\:{ \id\:\ id \ ,\BH\:\ BH \ }};}public static void main(String[] args) throws Exception {String json {\id\:1,\BH\:\aaa\};ObjectMapper mapper new ObjectMapper();mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);TestBean test mapper.readValue(json, TestBean.class);String json1 mapper.writeValueAsString(test);System.out.println(序列化前的 json :);System.out.println(json);System.out.println();System.out.println(反序列化后的对象:);System.out.println(test);System.out.println();System.out.println(反序列化后的 bean 再序列化后的 json :);System.out.println(json1);System.out.println();} } 下面是控制台的输出结果: 序列化前的 json : {id:1,BH:aaa}反序列化后的对象: {TestBean:{id:1 ,BH:null }}反序列化后的 bean 再序列化后的 json : {id:1,bh:null} 从对 test 对象打印的结果可以看出BH 属性并没有序列化成功。 从对 test 对象的序列化的结果可以看出BH 属性打印出来之后就变成小写的 bh json 属性了。 源码跟踪 对 jackson 原理感兴趣的同学可以跟踪代码读一下实现代码。 收集 bean 的属性名称 : com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector#collectAll() 方法中对 bean 的 field、get 方法、set 方法进行了收集。jackson 会忽略所有 private 字段、方法。最终收集到的 field 、get/set 方法名作为了 属性名称集合 。反序列化的时候如果 json 中的属性名在属性名称集合中找不到的话就没法设置值了。把大写名称改为小写的具体实现方法 : 在 com.fasterxml.jackson.databind.util.BeanUtil#legacyManglePropertyName() 方法中把大写名称改为了小写。 /*** Method called to figure out name of the property, given * corresponding suggested name based on a method or field name.** param basename Name of accessor/mutator method, not including prefix* (get/is/set)*/protected static String legacyManglePropertyName(final String basename, final int offset){final int end basename.length();if (end offset) { // empty name, nopereturn null;}// next check: is the first character upper case? If not, return as ischar c basename.charAt(offset);char d Character.toLowerCase(c);if (c d) {return basename.substring(offset);}// otherwise, lower case initial chars. Common case first, just one charStringBuilder sb new StringBuilder(end - offset);sb.append(d);int i offset1;for (; i end; i) {c basename.charAt(i);d Character.toLowerCase(c);if (c d) {sb.append(basename, i, end);break;}sb.append(d);}return sb.toString();} 解决方案 下面两种方法任意一种都可以解决大小写不匹配的问题 : 在 BH 字段上加注解 JsonProperty(“BH”) 来显式的声音属性的名称是 BH 。在 getBH() 方法或者 setBH() 这两个方法中的任意一个方法上加 JsonProperty(“BH”) 注解。
http://www.hkea.cn/news/14463192/

相关文章:

  • 重庆网站建设科技公司白菜网站建设
  • 百度收录不到公司网站wordpress 置顶插件
  • 网站开发外包哪家好客户管理系统的设计与实现
  • 做视频在线观看网站php和什么语言做网站
  • 大余做网站建设哈尔滨建设网站的免费咨询
  • 怎么把网站模板上传到自己的网站系统软件开发服务
  • 阿里云搭建网站多少钱运营商网站服务密码
  • 莆田山亭乡建设局网站北京网站建设那些
  • 18款禁用网站app直播创新的福州网站建设
  • 网站空间和域名网站页面权重
  • 品品牌牌建建设设网站做家政的在哪些网站推广
  • 江阴公司企业网站建设生成器
  • 上海门户网站开发中国菲律宾关系现状
  • 连南网站建设电商培训班
  • 大学国际化网站建设wordpress 查询文章
  • 大连企业网站设计欣赏游戏页面html模板
  • 做养生网站需要什么资质网站建设平面要多少分辨率
  • 洛阳做网站找哪家好企业网站提供商
  • 微网站开发视频教程上海网络营销推广外包
  • html企业网站怎么做个人网站如何快速通过icp备案
  • 网站备案相关手续费企业查询app
  • 网站设计资源建设工程合同指什么
  • 网站制作原理网站链接如何做二维码
  • 外贸公司网站改版思路公司部门简介模板
  • 默认网站建立建设门户网站的意见和建议
  • 模板网站建设多少钱河东做网站的公司
  • php管理系统 网站模版小程序开发兼职要多少钱
  • 河南省住房和城乡建设厅网站文件js特效素材网
  • 高端型网站建设国外外贸平台有哪些
  • 东莞网站设计公司哪家好不属于网站架构