如何为第三方枚举自定义反序列化器? [英] How to customize deserializer for third party Enum?

查看:127
本文介绍了如何为第三方枚举自定义反序列化器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下反序列化器:

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

它不是为枚举而调用,而是为另一个类调用。

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

我怎么能赢得这场胜利?

How can I win this?

推荐答案

问题已按以下方式解决:

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

和反序列化器:

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

这篇关于如何为第三方枚举自定义反序列化器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆