【问题标题】:Ignore enum case with JSON-B / Yasson使用 JSON-B / Yasson 忽略枚举大小写
【发布时间】:2019-01-21 12:29:37
【问题描述】:

使用 JSON-B / Yasson 有没有办法在反序列化时忽略枚举的大小写?

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

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

【问题讨论】:

    标签: java jsonb-api yasson


    【解决方案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()));
    

    【讨论】:

    • 我同意它不应该是默认行为。默认情况下应该区分大小写。
    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多