2015-07-31 2 views
1

У меня есть следующий deseriailzer:Как настроить десериализатор для третьего лица Enum?

public class HttpStatusDeserializer extends JsonDeserializer<HttpStatus> { 

    @Override 
    public HttpStatus deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException, JsonProcessingException { 
     ObjectCodec oc = jsonParser.getCodec(); 
     JsonNode node = oc.readTree(jsonParser); 
     return HttpStatus.valueOf(node.asText()); 
    } 
} 

и зарегистрировать его

public class CustomDeserializerModifier extends BeanDeserializerModifier { 

    @Override 
    public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc, JsonDeserializer<?> deserializer) { 
     if (beanDesc.getBeanClass() == HttpStatus.class) { 
      return new HttpStatusDeserializer(); 
     } 
     return deserializer; 

    } 
} 

mappingJackson2HttpMessageConverter 
       .setObjectMapper(new ObjectMapper().registerModule(new SimpleModule() 
                      .setSerializerModifier(new CustomSerializerModifier()) 
                      .setDeserializerModifier(new CustomDeserializerModifier()))); 

Он не ссылается на перечисление, но вызвать еще классов.

Как я могу выиграть это?

+0

Вы должны аннотировать класс перечислимую также и ваш метод Deserialize также изменится. Можете ли вы предоставить свой класс enum, чтобы помочь вам лучше? –

+0

@ Айнда Бхаттачария в вопросе Я упомянул, что это переименование третьей стороны. Эта библиотека enum drom. – gstackoverflow

ответ

0

Проблема была решена следующим образом:

class MyClass{ 
    ... 
    HttpStatus httpStatus = HttpStatus.OK //from org.springframework.http 
    @JsonIgnore 
    public HttpStatus getHttpStatus() { 
     return httpStatus; 
    } 

    @JsonProperty(value = "HttpStatus") 
    @JsonDeserialize(using = HttpStatusDeserializer.class) 
    public void setHttpStatus(HttpStatus httpStatus) { 
     this.httpStatus = httpStatus; 
    } 
    .... 
} 

и десериализатор:

public class HttpStatusDeserializer extends JsonDeserializer<HttpStatus> {  
    @Override 
    public HttpStatus deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { 
     ObjectCodec oc = jsonParser.getCodec(); 
     JsonNode node = oc.readTree(jsonParser); 
     return HttpStatus.valueOf(Integer.parseInt(node.asText())); 
    } 
} 
Смежные вопросы