How to customize deserializer for third party Enum?

丶灬走出姿态 提交于 2019-12-11 03:49:26

问题


I have the following deseriailzer:

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());
    }
}

and register it

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())));

It doesn't invoke for enum but invoke for another classes.

How can I win this?


回答1:


Problem was resolved like this:

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;
    }
    ....
}

and deserializer:

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()));
    }
}


来源:https://stackoverflow.com/questions/31747977/how-to-customize-deserializer-for-third-party-enum

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!