zoukankan      html  css  js  c++  java
  • @JsonIgnoreProperties注解不起作用的问题解决

      最近做的一个东西要调第三方服务接口,要参照接口文档开发,但是第三方服务的接口字段名全部都是大写,本来以为这种应该没有什么问题。但是实际开发中发现大写的字段名字去调后台接口的时候报:

      org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "LOGIN_ACCOUNT" (Class com.sitech.cloud.core.user.AccountInfo), not marked as ignorable
    at [Source: org.mortbay.jetty.HttpParser$Input@11bfe02; line: 1, column: 19] (through reference chain: com.sitech.cloud.core.user.AccountInfo["LOGIN_ACCOUNT"])

      瞬间懵了,看了看错误然后又去检查了几遍代码看是不是字符有问题,但是完全一模一样呀。完全不能理解。以前根本不知道会有这样的问题。查了很多东西都说加@JsonIgnoreProperties,但是我加了也没有用,搞不太懂了。但是看到原理说是转换json的时候,会默认把字段的的首字母修改为小写这样符合驼峰命名。 

    public static void main(String[] args) {
            CustInfoBo accountInfo = new CustInfoBo();
            accountInfo.setLOGIN_ACCOUNT("18720989209");
            accountInfo.setLOGIN_PASSWORD("123456");
            System.out.println(JSONObject.toJSON(accountInfo));
            
    }

      一试发现还真是这么个道理,JackSon 默认是通过驼式命名法处理。还查到json有默认的处理有一个变量控制,名字为compatibleWithJavaBean,默认为false,一看代码还真有。默认static的内容的先去系统读取有没有设置这个变量,如果是true就设置为true,如果是false就设置为false,果然是这样的。解决这个的问题是可以在初始化之前设置为true或者配置系统变量,但是与我现在的系统的解决不一样。

           我直接去掉了这个@JsonProperty的引入,发现竟然有2个,我使用的是第二个,那我就试一试第一个好了。果然可以完美解决大写的字段名传入问题。注意是

    import org.codehaus.jackson.annotate.JsonProperty;

      瞬间觉的自己太low了,解决问题的结果是开心的,不过还是得看看这个2个注解有撒不一样。发现Jackson有1.x系列和2.x系列,其中org.codehaus.jackson.annotate.JsonProperty是1.x系列,另外一个是2.x系列。查看jar包发现还真是这样的情况。这样就明白了2者其实是一样的,只是版本不同。至于为啥一个起作用和一个不起作用,我怀疑是跟我框架使用的jar包有关。不过目前还没有找到具体相关的内容。等有时间在把该问题好好的看一看。

  • 相关阅读:
    20145313《信息安全系统设计基础》第0周学习总结
    20145313张雪纯课程总结
    RocEDU.阅读.写作《苏菲的世界》书摘(七)
    RocEDU.阅读.写作《苏菲的世界》书摘(六)
    20145310《信息安全系统设计基础》课程总结
    20145310 《信息安全系统设计基础》第五周同学问题总结
    20145310《信息安全系统设计基础》第十四周学习总结
    20145310《信息安全系统设计基础》第十三周学习总结
    20145310《信息安全系统设计基础》实验五 网络通信
    20145310《信息安全系统设计基础》实验四 外设驱动程序设计
  • 原文地址:https://www.cnblogs.com/liaoweipeng/p/6771375.html
Copyright © 2011-2022 走看看