【问题标题】:Deserialising an Enum with a static factory method using Jackson使用 Jackson 使用静态工厂方法反序列化枚举
【发布时间】:2021-09-22 16:36:37
【问题描述】:

如果无法更改 Enum 的源代码,如何使用静态工厂方法反序列化 Enum?

例如,如何将 Jackson 配置为使用 MyEnum.fromKey() 进行反序列化?

public enum MyEnum {
  FOO("key1"),
  BAR("key2");

  private final String key;

  MyEnum(String key) {
    this.key = key;
  }

  public static final MyEnum fromKey(String key) {
     // lookup by MyEnum.key
  }

【问题讨论】:

    标签: enums jackson deserialization


    【解决方案1】:

    使用Jackson mixin 提供一个@JsonCreator 代表MyEnum.fromKey()

    public enum MyEnumMixIn {
      /* no values */;
    
      @JsonCreator
      public static MyEnum fromKey(String key) {
        return MyEnum.fromKey(key);
      }
    }
    
    ObjectMapper mapper = new ObjectMapper();
    mapper.addMixIn(MyEnum.class, MyEnumMixIn.class);
    

    【讨论】:

      猜你喜欢
      • 2015-12-08
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 2014-07-16
      • 2020-07-17
      • 1970-01-01
      相关资源
      最近更新 更多