6

我正在尝试使用 Jackson 注释来重命名序列化过程中产生的一些 json 标签。注释都编译得很好,当我运行时,杰克逊序列化工作,除了所有杰克逊注释被完全忽略。即使是@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;
    }
4

2 回答 2

30

一个相对常见的原因是试图使用“错误”的注释集: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)。

于 2013-09-12T05:17:13.660 回答
3

以防万一有人遇到类似的问题,只会@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());
于 2018-06-15T09:48:05.887 回答