2015-12-25 2 views
0

Как получить доступ к значениям @JacksonInject из пользовательского десериализатора или конвертера Jackson? Укажите, пожалуйста, исходное код для:Доступ к значениям @JackonInject из пользовательского десериализатора

  1. Точка входа, которая конфигурирует ObjectMapper.
  2. Класс, конструктор которого требует введенного значения.
  3. Пользовательский десериализатор для вышеуказанного класса.

Я видел DeserializationContext.findInjectableValue(), но я не был уверен, как построить соответствующий BeanProperty.

Я также посмотрел на @JsonDeserialize(converter = ...), но не видел способа передать введенные значения в преобразователь. Поддерживается ли это?

ответ

1

Вот мой (непроверенные) Ответ:

public class JacksonDeserializer extends StdDeserializer<MyPojo> 
    implements ContextualDeserializer 
{ 
    private static final long serialVersionUID = 1L; 
    /** 
    * The JSON property being deserialized (null if root object). 
    */ 
    private final BeanProperty property; 

    JacksonDeserializer() 
    { 
     super(MyPojo.class); 
     this.property = null; 
    } 

    /** 
    * @param property the JSON property being deserialized (null if root object) 
    */ 
    JacksonDeserializer(BeanProperty property) 
    { 
     super(MyPojo.class); 
     this.property = property; 
    } 

    @Override 
    public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) 
     throws JsonMappingException 
    { 
     return new JacksonDeserializer(property); 
    } 

    @Override 
    public MyPojo deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException 
    { 
     MyInjectable injectable = (MyInjectable) ctxt.findInjectableValue("myInjectable", property, null); 
     assert (scope != null); 
     // The rest of the deserializer goes here 
    } 
} 

Я надеюсь, что это помогает.

Смежные вопросы