使用JSON-B / Yasson忽略枚举大小写

时间:2019-01-21 12:29:38

标签: jsonb yasson

反序列化时,使用JSON-B / Yasson有什么方法可以忽略枚举的情况?

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

传入JSON的一部分:"condition" : "new" 问题在于传入的JSON使用小写的枚举。

1 个答案:

答案 0 :(得分:1)

我认为这应该是开箱即用的。因为从技术上讲,您可以将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()));