提问者:小点点

Jackson ObjectMapper设置JsonFormat。形状不带注释的数组


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

但是我想为我的第二个ObjectMapper全局设置这个特性。类似mapper的东西。设置形状(…)

怎么做呢?

UPD:

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

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

因此,我可以使用反射API更改我的所有类。

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


共1个答案

匿名用户

由于注释在字段上工作,所以不能将其设置为形状。全局级别的数组。这意味着所有字段都将被序列化并反序列化为数组值(想象一下,如果一个字段已经是一个列表,在这种情况下,它将被包装到另一个列表中,这可能是我们不想要的)。

但是,您可以为类型编写自己的序列化程序(将值转换为数组),并在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);