Jackson 使用不同的自定义序列化器序列化字段

Jackson serialize field with different custom serializers

是否可以为特定字段编写 n 个自定义序列化程序,然后有时使用序列化程序 A 而另一次使用序列化程序 B?我以前写过自定义序列化器,但我是通过注释使用它们的,这在这种情况下是不可能的。我真的很想避免像视图这样的东西,因为那时我必须为每个序列化程序实现编写一个 getter。

这是我的:

@JsonSerialize(using = MongoIdSerializer.class)
String id;

这就是我想要的:

@JsonSerialize(using = <SerializerDeclaredByPropertyFile>)
String id;

您可以编写在 属性 上使用的自定义序列化程序。

@JsonSerialize(using = DelegatingSerializer.class)
String id;

实现应该是这样的:

public class DelegatingSerializer extends JsonSerializer<String>{

   public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
       JsonSerializer<String> serializer = getSerializer();
       serializer.serialize(value, jgen, provider);      
   }

   private JsonSerializer<String> getSerializer() {
       ...
       return someSerializerInstance;
   }

}

getSerializer 方法中,您将 return 一个正确序列化程序的实例。