Игнорировать случай enum с JSON-B / Yasson - PullRequest
0 голосов
/ 21 января 2019

Используя JSON-B / Yasson, есть ли способ игнорировать регистр перечислений при десериализации?

public class MyObject{
  MyEnum condition;
  //getters and setters
} 
public enum MyEnum{
 NEW, OLD, REFURBISHED;
}

часть входящего JSON: "condition" : "new" Проблема в том, что входящий JSON использует перечисления в нижнем регистре.

1 Ответ

0 голосов
/ 22 января 2019

Я не думаю, что это должно быть доступно из коробки.Поскольку технически вы можете иметь как old, так и OLD в качестве допустимых значений вашего перечисления, проживающих вместе, учет готовых преобразований в верхнем регистре может нарушить эквивалентность в обе стороны.Подумайте о сериализации значения MyEnum.old, чтобы при десериализации получилось значение MyEnum.OLD.

Однако вы можете вызвать такое поведение с помощью адаптера.

public static class MyAdapter implements JsonbAdapter<MyEnum, String> {

    @Override
    public String adaptToJson(MyEnum value) {
        return value.name();
    }

    @Override
    public MyEnum adaptFromJson(String s) {
        return MyEnum.valueOf(s.toUpperCase());
    }
}

Далее аннотируйтеперечисление с @JsonbTypeAdapter.

@JsonbTypeAdapter(MyAdapter.class)
public enum MyEnum {
    NEW,
    OLD,
    REFURBISHED;
}

В качестве альтернативы вы создаете своего провайдера Jsonb следующим образом.

Jsonb jsonb = JsonbBuilder.create(new JsonbConfig().withAdapters(new MyAdapter()));
...