【问题标题】:Jackson ignoring @JsonIgnore?杰克逊无视@JsonIgnore?
【发布时间】:2015-07-10 15:26:50
【问题描述】:

我有一个不应该序列化为 JSON 对象的“只读”函数的类。因为函数名以“get”开头,Jackson 抢了,似乎不尊重附加的@JsonIgnore 标签:

import org.codehaus.jackson.annotate.JsonIgnore;

public class MyClass {

    publicMyClass() {}

    @JsonIgnore
    public String getSomeValue() {return "";}
}

我也尝试使用以下语法:

import org.codehaus.jackson.annotate.JsonIgnoreProperties;

@JsonIgnoreProperties({"someValue"})
public class MyClass {

    publicMyClass() {}

    public String getSomeValue() {return "";}
}

在任何一种情况下,生成的 JSON 输出都是相同的:

{someValue:""}

(我们将 Jackson 1.9.13 与 Spring MVC 一起使用。)

除了将函数重命名为以“get”以外的内容开头之外,我还能做些什么来防止 Jackson 序列化该函数的输出?

【问题讨论】:

  • 我打赌你的 Spring 配置是使用 Gson 或 Jackson 2 来序列化你的值。
  • @SotiriosDelimanolis 我怎样才能知道序列化器是什么,你知道吗?
  • 一方面,您可以检查您的运行时类路径。如果它同时包含 Jackson 2 和 Jackson 1,它将使用 Jackson 2(不查看 Jackson 1 注释)。其次,您是明确设置HttpMessageConverters 还是有默认值?
  • 补充@SotiriosDelimanolis 的观点,如果您的路径中有com.fasterxml.jackson.annotation.JsonIgnore,这是另一种说法。
  • 你需要 Jackson 2.1+ 和 Spring Framework 4.1 github.com/spring-projects/spring-framework/wiki/…

标签: java spring spring-mvc serialization jackson


【解决方案1】:

原来我们使用 Jackson 2 来进行 JSON 序列化,所以我需要更改注解包的位置。

杰克逊 1:

import com.codehaus.jackson.annotation.JsonIgnore

杰克逊 2:

import com.fasterxml.jackson.annotation.JsonIgnore

使用 fasterxml 导入一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-03
    • 2015-12-05
    • 2012-09-17
    • 2014-09-02
    • 2014-09-30
    • 2021-07-23
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多