Измените дсериализацию Джексона всех перечислений без использования аннотацийJAVA

Программисты JAVA общаются здесь
Anonymous
Измените дсериализацию Джексона всех перечислений без использования аннотаций

Сообщение Anonymous »

Мне нужно изменить десериализацию всех типов перечисления Java в Джексоне на уровне ObjectMapper , без использования аннотаций на отдельных классах аннотации. Настройка этого для сериализации проста, но не сразу очевидно, как может быть установлен пользовательский Deserializer Enum. Например, для enum exampleenum {foo_bar, drink_bar} enum значение foo_bar будет сериализовано как rab_oof и десериализуется обратно в exampleenum.foo_bar . У меня уже есть метод reversestring (string) , чтобы справиться с этим.

Код: Выделить всё

JsonMapper.builder().addModule(new SimpleModule()
.addSerializer(Enum.class, new JsonSerializer() {
@Override
public void serialize(Enum value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(reverseString(value.name());
}
})
.addKeySerializer(Enum.class, new JsonSerializer() {
@Override
public void serialize(Enum value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeFieldName(reverseString(value.name());
}
})

…
Это дает мне несколько уродливых предупреждений об enum необработанных типах, но я уверен, что могу найти способ обойти их или отключить их. Он работает нормально, хотя.
Теперь, как бы я добавил пользовательский десериализатор на том же уровне, который полагал бы все enum, правильно вызывая reversestring (строка) , чтобы вернуть исходный экземпляр перечисления?>

Подробнее здесь: https://stackoverflow.com/questions/795 ... nnotations

Вернуться в «JAVA»