Tomcat 8部署WebService时@JsonIgnore注解失效问题求助
哎,这个问题我之前在Tomee 1.x环境里踩过坑!@JsonIgnore不生效十有八九是容器自带的Jackson和你引入的版本冲突了,或者WebService压根没用到Jackson来序列化。给你几个排查和解决的方向:
排查容器Jackson版本冲突
Tomee 1.7.3本身自带了Jackson相关依赖,而且因为你把apache-tomee设为providedscope,容器启动时会优先加载自带的Jar包,导致你引入的2.8.11版本根本没被用到。你可以去Tomcat/Tomee的lib目录下找找jackson-core*.jar、jackson-databind*.jar这些文件,看看版本是不是和你引入的不一致。排除Tomee依赖中的Jackson
在你的pom.xml里给apache-tomee依赖添加排除规则,把它自带的Jackson相关包都排除掉,这样容器就会使用你引入的版本了:<dependency> <groupId>org.apache.openejb</groupId> <artifactId>apache-tomee</artifactId> <version>1.7.3</version> <scope>provided</scope> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> </exclusions> </dependency>确保Jackson核心包版本一致
Jackson的三个核心包(jackson-core、jackson-databind、jackson-annotations)必须版本统一,否则很容易出问题。你现在只加了jackson-databind,建议把另外两个也补上:<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.11</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.11</version> </dependency>检查WebService的序列化方式
如果你的WebService是基于JAX-WS实现的,默认可能用的是JAXB而非Jackson来序列化对象,这时候@JsonIgnore自然不会生效。你需要配置WebService使用Jackson作为消息处理器:- 先引入Jackson的JAX-RS provider依赖:
<dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.8.11</version> </dependency> - 在你的WebService类上添加
@Provider注解,或者在web.xml中配置这个Provider,让WebService使用Jackson来处理JSON序列化。
- 先引入Jackson的JAX-RS provider依赖:
确认注解包导入正确
一定要确保你用的是com.fasterxml.jackson.annotation.JsonIgnore,而不是旧版本Jackson(org.codehaus.jackson)的同名注解。导错包是最容易忽略的小问题,检查一下你的import语句!
内容的提问来源于stack exchange,提问作者Giles

