反序列化时,使用JSON-B / Yasson有什么方法可以忽略枚举的情况?
public class MyObject{
MyEnum condition;
//getters and setters
}
public enum MyEnum{
NEW, OLD, REFURBISHED;
}
传入JSON的一部分:"condition" : "new"
问题在于传入的JSON使用小写的枚举。
答案 0 :(得分:1)
我认为这应该是开箱即用的。因为从技术上讲,您可以将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()));