为了解释我的问题,假设我正在检索以下OData V2实体:
{
"d": {
"EmployeeID": 1,
"LastName": "Davolio",
"FirstName": "Nancy",
"Orders": {
"results": [
{
"OrderID": 10258
}
]
},
"Territories": {
"results": [
{
"TerritoryID": "06897"
}
]
}
}
}
我有相应的模型Class:
@JsonRootName(value = "d")
public class Employee {
@JsonProperty("EmployeeID")
private int employeeId;
@JsonProperty("LastName")
private String lastName;
@JsonProperty("FirstName")
private String firstName;
@JsonProperty("Orders")
private List orders;
@JsonProperty("Territories")
private List territories;
...
}
正如预期的那样,触发异常结果是因为"Orders“和”com.fasterxml.jackson.databind.exc.MismatchedInputException“集合实际上位于属性"results”中,正如OData V2所述。
你们知道如何忽略嵌套的"results“属性而直接获取列表吗?在这种情况下,是否真的需要自定义的反序列化程序或包装器类?
谢谢!
发布于 2021-02-26 09:24:48
总是有多种方法来解决这个问题。
一种方法是创建一个包装类,并让Employee直接引用它。
例如:
public class WrapperDto implements Serializable {
@JsonProperty("results")
private List elements;
}
public class Employee {
...
@JsonProperty("Orders")
private WrapperDto orders;
@JsonProperty("Territories")
private WrapperDto territories;
...
}
当您想要获取订单时,您必须调用orders.getResults()来获取列表
另一种解决方案可以在这里找到,其中你有一个自定义的包装器:Jackson 如何使用Jackson annotations?将嵌套值映射到属性
https://stackoverflow.com/questions/66378608
复制相似问题