@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..*(..)这样的方 ...
随机推荐
- 2017年最新chrome必备插件推荐
1. 上网必备 Speed dial plus新标签页, 直接替换掉chrome自带的毫无新意的新标签页,简洁优美快速,我本人非常喜欢. &lt;img src="https ...
- click和onclick本质的区别
原生javascript的click在w3c里边的阐述是DOM button对象,也是html DOM click() 方法,可模拟在按钮上的一次鼠标单击. button 对象代表 HTML 文档中的 ...
- effective C++ Item 33 避免隐藏继承而来的名字
1. 普通作用域中的隐藏 名字实际上和继承没有关系.有关系的是作用域.我们都知道像下面的代码: int x; // global variable void someFunc() { double x ...
- SignalR的一点点东西
JS部分 $.connection.hub.start().done(function () { alert(ok); }).fail(function (error) { alert(error); ...
- Win10 UWP开发系列:开发一个自定义控件——带数字徽章的AppBarButton
最近有个项目有一个这样的需求,在文章浏览页底部有几个AppBarButton,其中有一个是评论按钮,需要在评论按钮上显示一个红色数字,类似微信的新消息提醒: 这种设计在iOS和Android平台都是很 ...
- BootStrap入门教程 (四)
本文转自 http://www.cnblogs.com/ventlam/archive/2012/06/17/2536728.html 上讲回顾:Bootstrap组件丰富同时具有良好可扩展性,能够很 ...
- IOS动态自适应标签实现
先上效果图 设计要求 1.标签的宽度是按内容自适应的 2.一行显示的标签个数是动态的,放得下就放,放不下就换行 3.默认选中第一个 4.至少选中一个标签 实现思路 首先我们从这个效果上来看,这个标签是 ...
- Unity 3D Framework Designing(1)—— MVVM 模式的设计和实施(Part 2)
MVVM回顾 经过上一篇文章的介绍,相信你对 MVVM的设计思想有所了解.MVVM的核心思想就是解耦,View与ViewModel应该感受不到彼此的存在.View只关心怎样渲染,而ViewModel只 ...
- PN结加正向偏置电压 其空间电荷区为何变窄
理论基础:导体是内部具有较多可以自由移动的电荷的物体. 绝缘体是内部没有或者有很少可以自由移动的电荷的物体. +代表空穴带正电 -代表电子带负电 两竖线之间表示无自由移动电子或空穴部分,相当于绝缘体 ...
- PL/SQL编程重点语句输出整理
create or replace procedure pr_mytest is v_test number() :=; v_char varchar2():='数据库'; c_changl cons ...