杰克逊忽略 @JsonIgnore?

3

我有一个类,其中包含一个“只读”函数,不应该被序列化为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:""}

(我们正在使用带有Spring MVC的Jackson 1.9.13。)除了将函数重命名以以其他方式开头外,我还能做什么来防止Jackson序列化此函数的输出?

2
我敢打赌,你的Spring配置要么使用Gson,要么使用Jackson 2来序列化你的值。 - Sotirios Delimanolis
@SotiriosDelimanolis 你知道我怎么查找序列化器吗? - J.Steve
1
首先,您可以检查运行时类路径。如果它同时包含Jackson 2和Jackson 1,则将使用Jackson 2(它不会查看Jackson 1注释)。第二,您是否显式设置了 HttpMessageConverter 或使用默认值? - Sotirios Delimanolis
1
补充一下@SotiriosDelimanolis的观点,如果你的路径中有com.fasterxml.jackson.annotation.JsonIgnore可用,那是另一种判断方式。 - Sam Berry
你需要使用Jackson 2.1+来配合Spring Framework 4.1。https://github.com/spring-projects/spring-framework/wiki/Migrating-from-earlier-versions-of-the-Spring-Framework#libraries - Brian Clozel
非常感谢大家的反馈,你们是对的:我需要使用com.fasterxml.jackson注解。 - J.Steve
1个回答

7
原来我们使用的是Jackson 2进行JSON序列化,因此我需要更改注释包位置。 Jackson 1:
import com.codehaus.jackson.annotation.JsonIgnore

Jackson 2:

import com.fasterxml.jackson.annotation.JsonIgnore

使用 fasterxml 导入一切都能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接