【问题标题】:Java Enum Deserialization without class model getting null value没有类模型获取空值的Java枚举反序列化
【发布时间】:2022-01-23 17:36:49
【问题描述】:

我有一个像下面这样的枚举类。我需要在 Java8 或更高版本中非常有效地将 Json 字符串(具有键值对格式)反序列化为以下枚举对象。

public enum TestEnum {
    RED("Apple","Fruit"),
    GREEN("Hulk", "Monster");

    @JsonProperty("name")
    private final String name;
    private final String type;

    @JsonCreator
    public static TestEnum fromValue(String v) {
        System.out.println("fromValue() -->  : " + v);
        for (TestEnum myEnum : values()) {
            if (myEnum.name.equals(v)) {
                return myEnum;
            }
        }
        throw new IllegalArgumentException("invalid string value passed: " + v);
    }
}

当我以“Key:Value”格式传递输入值时,@JsonCreator 方法正在接收空值(fromValue() --> : null)。但是当我只用值传递输入时(EX:“苹果”)。 @JsonCreator 方法正在正确获取值。我在这里错过了什么?请任何帮助。提前致谢。

public class Sample {
    public static void main(String[] args) throws JsonProcessingException {
        //String input = "\"Apple\"";
        String input = "{\n  \"scanType\": \"Auto-LightWeight\"\n}";
        System.out.println("Input is : " + input);
        ObjectMapper mapper = new ObjectMapper();

        System.out.println("Enum : " + mapper.readValue(input, TestEnum.class));
    }
}

【问题讨论】:

    标签: java java-8 enums enumeration java-9


    【解决方案1】:

    知道了,我需要在 FromValue() 的参数字段中使用@JsonProperty 提及键名

    @JsonCreator
        public static TestEnum fromValue(@JsonProperty(value = "name", required = true) String v) {
    ..
    ...
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 2015-03-20
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多