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

时间:2015-04-01 08:41:54

标签: java jackson

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

这就是我所拥有的:

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

这就是我想要的:

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

1 个答案:

答案 0 :(得分:2)

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

@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方法中,您将返回正确序列化程序的实例。