首页 > 解决方案 > 如何使用 Jackson 流 API 将文本解析为 Enum 在运行时因不同枚举类而异?

问题描述

我想使用 Jackson 流 api 在运行时解析包含枚举的 POJO,如下所示:

Class<Enum<?>> enumClass = field.getType();
JsonParser parser = ...;
String s = parser.getValueAsString();
Enum enum = (Enum)isThereAnyBiFunctionCanGetDynamicEnum(s, enumClass);

我可以混合使用 DataBind 和 Stream API 解决方案,即用于ObjectReader获取Enum

ObjectReader reader = ...;
Enum enum = (Enum)reader.readValue(parser, enumClass);

我觉得这可能不是一个好习惯,请有人指导。
谢谢!

标签: javaenumsstreamjackson

解决方案


您可以尝试使用org.apache.commons.lang3.EnumUtilsclass 和getEnum方法:

import org.apache.commons.lang3.EnumUtils;

public class EnumApp {

    enum Type {
        INT,
        STRING
    }

    public static void main(String[] args) {
        System.out.println(EnumUtils.getEnum(Type.class, "INT"));
        System.out.println(EnumUtils.getEnum(Type.class, "STRING"));
        System.out.println(EnumUtils.getEnum(Type.class, "STRING1"));
    }
}

上面的代码打印:

INT
STRING
null

但是ObjectMapper API通过调用使用:

reader.readValue(parser, enumClass);

也可以,没有任何问题。


推荐阅读