【发布时间】:2013-02-02 17:08:04
【问题描述】:
JsonIgnore 注释似乎对我不起作用。任何想法为什么?
public class JsonTest implements Serializable {
@JsonIgnore
private static JsonTest instance = null;
@JsonIgnore
private transient Set<String> set = new CopyOnWriteArraySet<String>();
private JsonTest() {}
@JsonIgnore
public static JsonTest getInstance() {
if (instance == null)
instance = new JsonTest();
return instance;
}
public void setSet(Set<String> set) {
this.set = set;
}
@JsonIgnore
public Set<String> getSet() {
return set;
}
public String toString() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
try {
return mapper.writeValueAsString(this);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("test");
JsonTest.getInstance().setSet(set);
System.out.println(JsonTest.getInstance().toString());
}
}
输出:{"set":["test"]}
【问题讨论】:
-
我不记得了,但是 setSet() 暴露了它吗?我知道 setter 为序列化公开某些内容似乎很奇怪。
-
杰克逊的哪个版本?另外:确保 Jackson 映射器的版本(具有
ObjectMapper)和注释 jar 的版本相同(两者均为 1.x,或两者均为 2.x)——如果它们混淆了,则无法识别注释。 -
感谢 StaxMan,我有两个不同版本的 annotation 和 objectmapper。
-
@StaxMan - 我想在杰克逊注释的 POJO 中添加一个静态实用程序方法。它工作正常,但我是否需要在我的静态方法中添加任何注释,例如“@JsonIgnore”?