【发布时间】: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