jackson注释被忽略了

我正在尝试使用Jackson注释来重命名序列化期间生成的一些json标签。 所有注释都编译良好,当我运行时,jackson序列化工作除了所有jackson注释完全被忽略。 甚至像@JsonIgnore或@JsonProperty这样的基本对json响应也没有影响。 我在构建路径中的库是:

jsr311-qpi-1.1.1.jar jackson-[core|databind|annotations]-2.2.0.jar 

我正在Eclipse中运行jetty外部程序,外部程序设置如下:

 Location: .../apache-maven-2.2.1/bin/mvnDebug.bat working Directory: ${workspace_loc:/ohma-rest-svr} Arguments: jetty:run 

将远程Java应用程序配置设置为:

 Host: localhost Port: 8000 

没有错误消息可以使用,我有点失去了尝试的东西。 任何想法,将不胜感激。

这是我需要序列化的类的一些代码示例:

 @XmlRootElement(name="ads-parameter") public class DefineParameterResponse { private Date _createdAt = new Date(); @JsonProperty("created-at") @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd,HH:00", timezone="CET") @XmlElement public String getCreatedAt() { return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(_createdAt); } @JsonProperty("created-at") public void setCreatedAt(Date createdAt) { this._createdAt = createdAt; } private String _dataTitle1 = "Default Title1"; @XmlElement @JsonProperty("data-title-1") public String getDataTitle1() { return _dataTitle1; } @JsonProperty("data-title-1") public void setDataTitle1(String dataTitle1) { this._dataTitle1 = dataTitle1; } @XmlElement @JsonProperty("data-title-2") public String getDataTitle2() { return _dataTitle2; } @JsonProperty("data-title-2") public void setDataTitle2(String dataTitle2) { this._dataTitle2 = dataTitle2; } 

一个相对常见的原因是尝试使用“错误”的注释集:Jackson 1.x和Jackson 2.x注释存在于不同的Java包中,而数据绑定必须与主要版本匹配。 这种设计的好处是允许并排使用1.x和2.x版本,而不会产生类加载冲突; 但缺点是你必须确保你有匹配的版本。

最大的问题是框架的使用:许多JAX-RS实现(如Jersey)默认仍然使用Jackson 1.x. 所以我猜你可能间接使用Jackson 1.x,但添加了Jackson 2.x注释。 如果是这样,您需要使用1.x注释( org.codehaus.jackson下的org.codehaus.jackson )。

以防有人遇到类似的问题,只会忽略@JsonFormat

考虑到在Spring Boot + Java 8上下文中, LocalDateTime的处理可能会遇到麻烦。 而不是遵循依赖:

  compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jdk8' 

你应该使用:

  compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310' 

此外,当您创建Jackson ObjectMapper您需要注册正确处理LocalDateTime的实现:

  json = new ObjectMapper().findAndRegisterModules().writeValueAsString(entity); new ObjectMapper().findAndRegisterModules().readValue(json, entity.getClass());