@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..*(..)这样的方 ...
随机推荐
- 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通
1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 618 Solved: 217 ...
- Archlinux 中安装 LyX
LyX 是 Latex 的 GUI 界面程序.使用效果类似 Office Word 和 wps.可直接生成 PDF 文件. 我使用的是 LyX + TexLive + XeTeX 组合.近期 Arch ...
- 部署Cloudera Management for centos 7
hadoop生态圈框架工具甚多,自己整合起来很是繁琐,特别是oozie以及hue结合来实现hive.mr.spark等定时依赖任务更是一步一个坑,为了减少踩坑,只好从apache hadoop,转向C ...
- Win10 UWP开发系列:开发一个自定义控件——带数字徽章的AppBarButton
最近有个项目有一个这样的需求,在文章浏览页底部有几个AppBarButton,其中有一个是评论按钮,需要在评论按钮上显示一个红色数字,类似微信的新消息提醒: 这种设计在iOS和Android平台都是很 ...
- centos6.5安装配置supervisor
1.下载并安装supervisor https://pypi.python.org/pypi/supervisor/3.2.0 .tar.gz cd supervisor- python setup. ...
- 模块中为什么要加__name__ == "__main__"
写一个hello模块 #!/usr/sbin/env python #-*- coding:utf- -*- print "我是hello模块,我被执行了" 在另一个python程 ...
- 使用idea2017搭建SSM框架
搭建个SSM框架居然花费了我好长时间!特此记录! 需要准备的环境: idea 2017.1 jdk1.8 Maven 3.3.9 请提前将idea与Maven.jdk配置好,本次项目用的都是比较新的 ...
- Redis中的master-slave&sentinel
redis安装 解压完成后可以看到INSTALL和README.md文件,查看以获取更多有用信息. 在README文件中可以获取到软件的安装步骤.以下安装步骤基于此. #step1 进入文件夹,执行编 ...
- JavaScript原生Array常用方法
JavaScript原生Array常用方法 在入门Vue时, 列表渲染一节中提到数组的变异方法, 其中包括push(), pop(), shift(), unshift(), splice(), so ...
- 转接口IC ADV7280/ADV7280-M:CVBS转MIPI转接口芯片 10位、4倍过采样标清电视视频解码器,支持去隔行
概述ADV7280/ADV7280-M是功能丰富的单芯片.多格式视频解码器.ADV7280/ADV7280-M可自动检测标准模拟基带视频信号,兼容复合.S视频和分量视频形式的NTSC.PAL和SECA ...