@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包有关。不过目前还没有找到具体相关的内容。等有时间在把该问题好好的看一看。
@JsonIgnoreProperties注解不起作用的问题解决的更多相关文章
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- JAVA 注解的几大作用及使用方法详解【转】
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- 【Java】java注解@Transient的作用, 配合JPA中时间段的查询
java注解@Transient的作用 @Transient标注的属性,不会被ORM框架映射到数据库中. 用于数据库表字段和java实体属性不一致的时候,标注在属性上使用. 例如时间段的查询 查询 R ...
- eclipse集成lombok注解不起作用
安装步骤: 步骤一:lombok的下载地址为:https://projectlombok.org/download,jar包很小.这里也把依赖写出来: <dependency> <g ...
- Spring @Transactional注解不起作用解决办法及原理分析
Transactional失效场景介绍 第一种 Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用.例如以下代码. 定义一个错误的@Trans ...
- SpringBoot Shiro 权限注解不起作用
最近在学习springboot结合shiro做权限管理时碰到一个问题. 问题如下: 我在userRealm中的doGetAuthorizationInfo方法中给用户添加了权限,然后在Controll ...
- JsonIgnore注解不起作用的解决办法
一开始在属性上注解了JsonIgnore以为就不会序列化了,结果还是有这个属性,看来是没有起作用啊 [JsonIgnore] public List<int> SubjectAndSubS ...
- jackson JsonPropertyOrder和@JsonIgnoreProperties注解
有些时候,我们在和外部系统交互的时候使用了json作为标准的数据交换格式,同时为了安全性考虑,增加了对报文的校验,因此我们需要确保序列化的时候参数有序且不多不少刚好,因为对外的API不像后台和前端交互 ...
- AOP注解不起作用的debug结果
经过2天的调试,我发现AOP注解配置不起作用居然是表达式的错误导致的 在xml文件中配置的base-package有关,初步认为@PointCut只能使用base-package..*(..)这样的方 ...
随机推荐
- Eclipse添加tomcat出现 The Apache Tomcat installation at this directory is version 8.5.6. A Tomcat 8.0 installation is expected.
打开tomcat安装目录:apache-tomcat-8.5.6\lib 找到catalina.jar 用解压缩工具打开 org/apache/catalina/util/ServerInfo.pro ...
- Golang版protobuf编译
官方网址: https://developers.google.com/protocol-buffers/ (需要FQ) 代码仓库: https://github.com/google/protobu ...
- <abbr>标签的
表示一个缩写形式,比如 "Inc."."etc.".通过对缩写词语进行标记,您就能够为浏览器.拼写检查程序.翻译系统以及搜索引擎分度器提供有用的信息. 将一个标 ...
- 关于数据库与JAVA连接及其出现问题的解决方式
数据库连接java的方式一共有两个 建立JDBC-ODBC桥接器 加载纯JAVA数据库驱动程序 注意: JDBC-ODBC桥接器无需下载数据库的驱动程序,但是JDK1.8已经把JDBC-ODBC桥接器 ...
- 【CNMP系列】VIM编辑器详解
缘起 大学的时候做过Linux内核驱动程序研发,之前写C语言就是用的Vim编辑器,当年的Vim还不如今天之强大,当时的插件也没有现在这么多,只是觉得这个编辑器能满足我想要的所有,查看Linux内核代码 ...
- 简单实用的JQuery弹出层
效果: 初始状态时滚动条是可以滚动的 弹出层出现之后:1.弹窗始终居于整个窗口的中间 2.滚动条不可滚动 实现代码: HTML代码: <div class="container&quo ...
- js的基本介绍
一:JavaScript简称js 他是个脚本语言,需要有宿主文件,他的宿主文件是html文件. 二:js的用法 js :1)进行数据运算 2) 控制浏览器的一些功能 3)控制元素 +元素 +样式 +内 ...
- JS——函数、事件
1.函数字符串函数 var s=new string(); var ss="hello world"; var sss=""HELLO, WORLD" ...
- SVN使用小记
SVN(Subversion)是优秀的版本控制工具,之前在eclipse里面项目管理的时候,File-->Import-->SVN-->从SVN检出项目-->创建新的资源库位置 ...
- CF615D Multipliers [数学]
tags:[计数原理][乘法逆元][归纳の思想]题解(复杂度:O(mlogm)):棘手之处:n的约数多到爆炸.因此我们不妨从因子的角度来分析问题.对n分解质因数得:n = p1^a1 * p2^a2 ...