java - 具有相同 JsonProperty 属性的不同字段
问题描述
在同一个类中序列化 JSON 时是否可能有类似下面的内容
@JsonProperty("stats")
private StatsDetails statsDetails
@JsonProperty("stats")
private List<StatsDetails> statsDetailsList
所以我可以在形成 json 时只包含 statsDetails 或 statsDetailsList 中的一个。
我还有一个单独的 JsonMapper 代码,可以将这个 pojo 数据转换为我没有包含在此处的 json。
解决方案
你不能这样做。它会抛出JsonMappingException
杰克逊不知道你指的是哪个领域。您可以使用以下代码自行尝试:
POJO类:
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
import java.util.List;
public class POJOClass {
public POJOClass(String object) {
this.object = object;
}
public POJOClass(List<String> objectList) {
this.objectList = objectList;
}
@JsonProperty("object")
public String object;
@JsonProperty("object")
public List<String> objectList;
@JsonGetter("object")
public String getObject() {
return object;
}
@JsonGetter("object")
public List<String> getObjectList() {
return objectList;
}
@JsonSetter("object")
public void setObject(String object) {
this.object = object;
}
@JsonSetter("object")
public void setObjectList(List<String> objectList) {
this.objectList = objectList;
}
}
主类:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
public class MainClass {
public static void main(String[] args) {
String text = "f";
List<String> list = Arrays.asList("a", "b", "c");
ObjectMapper mapper = new ObjectMapper();
try {
String json = mapper.writeValueAsString(new POJOClass(text));
String listJson = mapper.writeValueAsString(new POJOClass(list));
System.out.println("json=" + json);
System.out.println("listJson=" + listJson);
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
com.fasterxml.jackson.databind.JsonMappingException: Multiple fields representing property "object": POJOClass#object vs POJOClass#objectList
推荐阅读
- swift - SwiftUI 发布的变量未更新
- sql - 根据序列位置编号创建新的开始日期和结束日期,
- python - Return the size of a python query in bytes
- windows - WSL 2:从 Windows 10 Bash Shell 运行图形 Linux 桌面应用程序“错误 E233:无法打开显示”
- javascript - 在javascript中执行回调后如何替换属性并保留它?
- machine-learning - 如何将键值特征(聚合数据)提供给 LSTM?
- ruby-on-rails - ROR - 数据库种子不会给我正确的日期 - 总是 2000 年 1 月 1 日
- c# - 无法从 IGenericReporsitoty 转换
到 IGenericReportitoty - python - 在 python 中绘制 YoY 价格相关性。(绘制 Dataframe 行的相关性)
- python - 需要帮助理解冒泡排序解决方案代码