在Spring Boot中自定义jackson反序列化

时间:2017-01-10 09:53:19

标签: spring-boot jackson

我试图通过创建模块bean来为小写序列化/反序列化枚举。

@Bean
public Module enumModule() {
    SimpleModule module = new SimpleModule();
    module.setDeserializerModifier(new BeanDeserializerModifier() {
        @Override
        public JsonDeserializer<Enum> modifyEnumDeserializer(DeserializationConfig config,
                                                             final JavaType type,
                                                             BeanDescription beanDesc,
                                                             final JsonDeserializer<?> deserializer) {
            return new JsonDeserializer<Enum>() {
                @Override
                public Enum deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
                    Class<? extends Enum> rawClass = (Class<Enum<?>>) type.getRawClass();
                    return Enum.valueOf(rawClass, jp.getValueAsString().toUpperCase());
                }
            };
        }
    });
    module.addSerializer(Enum.class, new StdSerializer<Enum>(Enum.class) {

        @Override
        public void serialize(Enum value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
            jgen.writeString(value.name().toLowerCase());
        }
    });
    return module;
}

序列化工作正常,但从不调用反序列化代码。还尝试使用Jackson2ObjectMapperBuilder但没有成功。

使用Spring Boot 1.4.3并使用

运行测试
@RunWith(SpringRunner.class)
@WebMvcTest(value = FooController.class)

手动创建ObjectMapper并注册模块时,它按预期工作。

0 个答案:

没有答案