gpt4 book ai didi

java - Jackson ObjectMapper 设置 JsonFormat.Shape.ARRAY 不带注释

转载 作者:行者123 更新时间:2023-11-30 02:31:10 28 4
gpt4 key购买 nike

我需要使用两个 jackson 2 对象映射器。两个映射器都使用同一组类。首先,我需要使用标准序列化。在第二个中,我想对所有类使用 ARRAY 形状类型(请参阅 https://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonFormat.Shape.html#ARRAY )。

但我想为我的第二个 ObjectMapper 全局设置此功能。像mapper.setShape(...)之类的东西

怎么做?

更新:

我找到了一种覆盖该类配置的方法:

mapper.configOverride(MyClass.class)
.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.ARRAY));

所以我可以使用 Reflection API 更改我的所有类。

很尴尬的是,我覆盖了全局设置,但又不能直接设置。

最佳答案

由于@JsonFormat注释适用于字段,因此您无法在全局级别将其设置为Shape.Array。这意味着所有字段都将被序列化和反序列化为数组值(想象一下,如果一个字段已经是一个列表,在这种情况下,它将被包装到另一个列表中,这是我们可能不想要的)。

但是,您可以为类型编写自己的序列化器(将值转换为数组)并在ObjectMapper中配置它,例如:

class CustomDeserializer extends JsonSerializer<String>{

@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
gen.writeStartArray();
gen.writeString(value);
gen.writeEndArray();
}
}

并将其配置为ObjectMaper实例,例如:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(String.class, new CustomDeserializer());
mapper.registerModule(module);

关于java - Jackson ObjectMapper 设置 JsonFormat.Shape.ARRAY 不带注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44246074/

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