1

Using JSON-B / Yasson is there any way to ignore case of enums when deserializing?

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

part of incoming JSON: "condition" : "new" The problem is that the incoming JSON uses the enums in lowercase.

4

1 回答 1

4

我不认为这应该是开箱即用的。因为从技术上讲,您可以同时拥有枚举的有效值oldOLD有效值,因此允许开箱即用的大写转换可能会破坏往返等效性。考虑序列化一个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()));
于 2019-01-22T15:01:56.913 回答