gpt4 book ai didi

java - jackson 的 JsonIgnore

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:36 27 4
gpt4 key购买 nike

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"]}

最佳答案

Transient 表示该字段不会被序列化。您不需要在那里添加 @JsonIgnore 注释,因为该字段无论如何都会被排除在外。

您至少可以在 org.codehaus.jackson:jackson-mapper-asl:1.9.13 和 com.fasterxml.jackson.core:jackson-annotations:2.4.3 中找到 @JsonIgnore 注释(这是我使用的) . ObjectMapper 在 jackson-mapper-asl 工件中的位置。这里有趣的部分是,如果我使用来自 jackson-annotations (com.fasterxml.jackson.annotation.JsonIgnore) 的 @JsonIgnore - 即使我将 ObjectMapper 配置为仅使用属性,它也不起作用('set' 是响应) .可能是 fasterxml 实现中的错误,但我没有找到它。

因此,如果您使用 codehaus 而不是 fasterxml(我添加了配置以仅使用字段),它会工作得很好:

import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;

public class JsonTest implements Serializable {
@JsonIgnore
private static JsonTest instance = null;

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);
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
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());
}
}

关于java - jackson 的 JsonIgnore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14664282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com