java - Java Jackson 从多个模块中选择注册模块以将 JSON 序列化为字符串?
问题描述
我有一个简单的 java 类,想将它序列化为不同的 JSON 输出。例如:
Class User {
public int id;
public String name;
}
// 2 expected outputs
Version 1 (V1): {"id": "1", "first_name": "A"}
Version 2 (V2): {"id": "1", "name": "A"}
我创建了 2 个自定义模块来写入 JSON 字符串,并将它们注册到一个 ObjectMapper,如下所示:
public class ItemSerializerModuleV1 extends SimpleModule {
public ItemSerializerModuleV1() {
super(NAME, VERSION_UTIL.version());
addSerializer(Item.class, new ItemSerializerV1());
}
}
public class ItemSerializerModuleV2 extends SimpleModule {
public ItemSerializerModuleV2() {
super(NAME, VERSION_UTIL.version());
addSerializer(Item.class, new ItemSerializerV2());
}
}
ObjectMapper mapper = new ObjectMapper();
mapper.registerModules(new ItemSerializerModuleV1(), new ItemSerializerModuleV2());
但是,当 ObjectMapper 写入 JSON string 时,我不知道如何选择应该使用哪个模块。它只使用下面的代码选择 V2 模块(最后一个注册的模块),而我也想写为 V1。
String serialized = mapper.writeValueAsString(myItem);
解决方案
模块可用于扩展 提供的功能ObjectMapper
,例如,通过添加自定义序列化器和反序列化器的提供程序。注册后,您无法为特定序列化选择模块或禁用模块。
所以你应该有两个实例,ObjectMapper
每个实例都会注册一个不同的模块。
推荐阅读
- amazon-web-services - 尝试使用 aws-amplify 从 s3 存储桶调用 appsync 时出现错误 401
- javascript - 如何使用 ChartJS 自动重新调整日志图表的 y 轴?
- python - 如何将这个多维列表重塑为二维数组?
- sql - 为nodejs访问JSON中的元素
- javascript - 如何将动态输入值添加到本地状态以进行检索
- c++ - 同时从服务器发送和接收
- android - 如何创建一个多对多数据库模式,同时保持关联项目的顺序?
- c - C 函数返回 0,即使调试器显示它返回 1
- r - 如何找到标准误差在正态分布中的特定数量的概率?
- database - Lando db-import 导入数据库需要很长时间