2015-04-01 4 views
0

Можно ли написать n настраиваемых сериализаторов для определенного поля, а затем использовать сериализатор A и другое время использовать сериализатор B? Ранее я писал пользовательские сериализаторы, но я использовал их по аннотации, которая в этом случае невозможна. Я действительно хотел бы избежать чего-то вроде просмотров, так как тогда мне нужно было написать getter для каждой реализации сериализатора.Поле сериализации Jackson с различными пользовательскими сериализаторами

Это то, что у меня есть:

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

Это то, что я хочу:

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

ответ

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 вы бы вернуть экземпляр правильного сериализатором.

+0

хорошая идея, thx! – KIC