Jackson ObjectMapper 设置 JsonFormat.Shape.ARRAY 没有注释
Jackson ObjectMapper set JsonFormat.Shape.ARRAY without annotation
我需要使用两个 jackson 2 对象映射器。
两个映射器都使用同一组 classes。
首先我需要使用标准序列化。
在第二个中,我想对所有 classes 使用 ARRAY 形状类型(参见 https://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonFormat.Shape.html#ARRAY)。
但我想为我的第二个 ObjectMapper 全局设置此功能。像 mapper.setShape(...)
怎么做?
更新:
我找到了一种方法来覆盖 class 的配置:
mapper.configOverride(MyClass.class)
.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.ARRAY));
所以我可以使用反射 API 为所有 classes 进行更改。
尴尬的是,我覆盖了全局设置,但我不能直接设置它。
由于 @JsonFormat
注释适用于字段,因此您不能在全局级别将其设置为 Shape.Array
。这意味着所有字段都将被序列化和反序列化为数组值(想象一下,如果一个字段已经是一个列表,在这种情况下,它将被包装到另一个我们可能不想要的列表中)。
但是,您可以为类型(将值转换为数组)编写自己的 serializer
并在 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);
我需要使用两个 jackson 2 对象映射器。 两个映射器都使用同一组 classes。 首先我需要使用标准序列化。 在第二个中,我想对所有 classes 使用 ARRAY 形状类型(参见 https://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonFormat.Shape.html#ARRAY)。
但我想为我的第二个 ObjectMapper 全局设置此功能。像 mapper.setShape(...)
怎么做?
更新:
我找到了一种方法来覆盖 class 的配置:
mapper.configOverride(MyClass.class)
.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.ARRAY));
所以我可以使用反射 API 为所有 classes 进行更改。
尴尬的是,我覆盖了全局设置,但我不能直接设置它。
由于 @JsonFormat
注释适用于字段,因此您不能在全局级别将其设置为 Shape.Array
。这意味着所有字段都将被序列化和反序列化为数组值(想象一下,如果一个字段已经是一个列表,在这种情况下,它将被包装到另一个我们可能不想要的列表中)。
但是,您可以为类型(将值转换为数组)编写自己的 serializer
并在 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);