gpt4 book ai didi

java - 如何忽略 jackson 注释?

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

我有两个类:

public class Bar {
private String identifier;
private String otherStuff;

public Bar(){}

public Bar(String identifier, String otherStuff) {
this.identifier = identifier;
this.otherStuff = otherStuff;
}

// Getters and Setters
}

public class Foo {
private String foo;

@JsonSerialize(using=BarsMapSerializer.class)
@JsonDeserialize(using=BarsMapDeserializer.class)
private Map<String, Bar> barsMap;

public Foo(){}
public Foo(String foo, Map<String, Bar> barsMap) {
this.foo = foo;
this.barsMap = barsMap;
}

// Getters and Setters
}

当我使用代码对 Foo 进行序列化时:

public static void main(String[] args) throws Exception {
Map<String, Bar> barsMap = new LinkedHashMap<>();
barsMap.put("b1", new Bar("bar1", "nevermind1"));
barsMap.put("b2", new Bar("bar2", "nevermind2"));
barsMap.put("b3", new Bar("bar3", "nevermind3"));
Foo foo = new Foo("foo", barsMap);

ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(foo);
System.out.println(jsonString);
}

输出是:

{"foo":"foo","barsMap":{"b1":"bar1","b2":"bar2","b3":"bar3"}}

在大多数情况下没问题,但在某些情况下我想在我的 json 中包含完整的 Bar 对象,如下所示:

{"foo":"foo","barsMap":{"b1":{"identifier":"bar1", "otherStuff":"nevermind1"},"b2":{"identifier":"bar2", "otherStuff":"nevermind2"},"b3":{"identifier":"bar3", "otherStuff":nevermind3"}}}

是否可以在不编写自定义序列化程序的情况下实现这一点?我知道我可以使用混合机制添加注释,但基本上在某些情况下我需要忽略现有注释。

最佳答案

我已经使用混合机制解决了我的问题。

public interface FooMixin {
@JsonSerialize
Map<String, Bar> getBarsMap();
@JsonDeserialize
void setBarsMap(Map<String, Bar> barsMap);
}

混合了这个接口(interface),类 Foo 被序列化为默认的序列化器。如您所见,您需要添加 JsonSerialize/JsonDeserialize 注释而不指定任何类。

下面的代码展示了这个接口(interface)的用法:

mapper = new ObjectMapper();
mapper.addMixInAnnotations(Foo.class, FooMixin.class);
jsonString = mapper.writeValueAsString(foo);
System.out.println(jsonString);

关于java - 如何忽略 jackson 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22830165/

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