java - 如何使用 Jackson 流 API 将文本解析为 Enum 在运行时因不同的枚举类而异?

标签 java enums stream jackson

我想使用 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);

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

最佳答案

您可以尝试使用org.apache.commons.lang3.EnumUtils类和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);

也还可以,没有什么问题。

关于java - 如何使用 Jackson 流 API 将文本解析为 Enum 在运行时因不同的枚举类而异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59554176/

相关文章:

java - 是否可以在循环中的每个方法之后检查条件?如果是这样,如何?

java - JSON 对象从 api 随机变化

enums - 枚举频率 - 错误 UndefinedFunctionError

c# - FLV车身长度

java - 为什么 InputStreamReader 在从 jar 读取时抛出 NPE?

html - ffmpeg 流桌面代替 -i/dev/video0

java - Eclipse:类型推断期间为 "Unknown error"

java - 努力理解这段代码如何输出欧几里得算法

c# - 查明枚举是否设置了 "Flags"属性

c# - 如何在 C# 中获取枚举索引值