我试图通过创建模块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
并注册模块时,它按预期工作。