从 OData V2 实体获取嵌套 "results" 列表
Get nested "results" list from OData V2 entity
为了解释我的问题,假设我正在检索以下 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<Order> orders;
@JsonProperty("Territories")
private List<Territory> territories;
...
}
正如预期的那样,触发了异常 com.fasterxml.jackson.databind.exc.MismatchedInputException,因为“订单”和“领土”集合实际上在 属性“结果”中,正如 OData V2 所述。
你们知道如何忽略嵌套的“结果”属性 并立即获取列表吗?
在这种情况下是否真的需要自定义反序列化器或包装器 class?
谢谢!
总是有多种方法可以解决这个问题。
一种是创建包装器 class 并让 Employee 直接引用它。
例如:
public class WrapperDto<T> implements Serializable {
@JsonProperty("results")
private List<T> elements;
}
public class Employee {
...
@JsonProperty("Orders")
private WrapperDto<Order> orders;
@JsonProperty("Territories")
private WrapperDto<Territory> territories;
...
}
当你想获取订单时,你必须调用 orders.getResults() 来获取列表
另一种解决方案可以在这里找到,您可以在此处找到自定义包装器:
为了解释我的问题,假设我正在检索以下 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<Order> orders;
@JsonProperty("Territories")
private List<Territory> territories;
...
}
正如预期的那样,触发了异常 com.fasterxml.jackson.databind.exc.MismatchedInputException,因为“订单”和“领土”集合实际上在 属性“结果”中,正如 OData V2 所述。
你们知道如何忽略嵌套的“结果”属性 并立即获取列表吗? 在这种情况下是否真的需要自定义反序列化器或包装器 class?
谢谢!
总是有多种方法可以解决这个问题。
一种是创建包装器 class 并让 Employee 直接引用它。
例如:
public class WrapperDto<T> implements Serializable {
@JsonProperty("results")
private List<T> elements;
}
public class Employee {
...
@JsonProperty("Orders")
private WrapperDto<Order> orders;
@JsonProperty("Territories")
private WrapperDto<Territory> territories;
...
}
当你想获取订单时,你必须调用 orders.getResults() 来获取列表
另一种解决方案可以在这里找到,您可以在此处找到自定义包装器: