java - 如何使用 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);
我觉得这可能不是一个好习惯,请有人指导。
谢谢!
解决方案
您可以尝试使用org.apache.commons.lang3.EnumUtils
class 和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);
也可以,没有任何问题。
推荐阅读
- mongodb - 通过 Ansible 初始化 MongoDB 副本集
- android - 我的 Android 设备未在 Android Studio 上显示
- javascript - SemanticUI Accordion 表的第三维在打开时立即关闭
- firebase - Firestore 规则:仅当按 ID 过滤时才允许列表操作
- php - Symfony DependencyInjection:导入多个资源(yaml)
- android - getDisplay 和 getOrientation 未检测到 TextView
- google-apps-script - 将 appscript 代码应用到工作簿中的多个工作表的下拉列表中进行多项选择
- java - IBM VisualAge RPG 密码更改给出错误无法在注册表中找到 JRE,需要 JRE
- node.js - 即使使用 process.on(uncaughtException),Nodejs 进程也会崩溃
- c - 使用在指定初始化程序中初始化的变量