java - 在 Java 中使用 Jackson 处理 JSON(反)序列化中的原始联合类型
问题描述
我知道围绕这个主题已经有几个问题,但我仍然很难为原始类型找到一个好的解决方案。我正在尝试序列化和反序列化以下 JSON 数据:
{
"key": "key1"
"value": "value1"
}
但是,该值是联合类型,可以是布尔值、数字或字符串。所以这些也是有效的输入:
{
"key": "key2"
"value": true
}
和
{
"key": "key3"
"value": 3
}
将其序列化和反序列化为 Java POJO 的最佳方法是什么?我的方法看起来像这样(但显然只适用于字符串值)
@RequiredArgsConstructor
@Getter
@EqualsAndHashCode
public class Request {
private final String key;
private final String value;
}
@RequiredArgsConstructor
@Getter
@EqualsAndHashCode
public class Response {
private final String key;
@JsonInclude(JsonInclude.Include.NON_NULL)
private final String value;
}
解决方案
就这样解决了。
@RequiredArgsConstructor
@Getter
@EqualsAndHashCode
public class Request {
private final String key;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "valueClass")
private final String value;
private final String valueClass;
}
@RequiredArgsConstructor
@Getter
@EqualsAndHashCode
public class Response {
private final String key;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "valueClass")
private final String value;
@JsonIgnore
private final String valueClass;
}
推荐阅读
- regex - 正则表达式匹配和不匹配
- apache - 从真实目录中删除尾部斜杠
- dialogflow-es - How to prompt for an entity with "yes" or "no" question in dialogflow?
- java - Java classpath ordering inconsistent between docker hosts
- r - Vector for Function Values?
- c# - RijndaelManaged CreateEncryptor works in VB.NET but errors in C#
- java - Thymeleaf - 表中可点击的 URL(Web 链接)
- ios - ios firebase 如何在集合中获取多个对象?
- maven - 是否可以使用 maven 安装 karaf 服务器?
- python - Python ciscotelnet