【问题标题】:Get nested "results" list from OData V2 entity从 OData V2 实体获取嵌套的“结果”列表
【发布时间】:2021-02-26 00:50:00
【问题描述】:

为了解释我的问题,假设我正在检索以下 OData V2 实体:

{
    "d": {
        "EmployeeID": 1,
        "LastName": "Davolio",
        "FirstName": "Nancy",
        "Orders": {
            "results": [
                {
                    "OrderID": 10258
                }
            ]
        },
        "Territories": {
            "results": [
                {
                    "TerritoryID": "06897"
                }
            ]
        }
    }
}

而且我有对应的模型类:

@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 被触发,因为“Orders”和“Territories”集合实际上在属性“results”内,正如 OData V2 所述。

你们知道如何忽略嵌套的“结果”属性并立即获取列表吗? 在这种情况下真的需要自定义反序列化器或包装器类吗?

谢谢!

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    解决这个问题总是有多种方法。

    一种是创建一个包装类并让员工直接引用它。

    例如:

    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() 来获取列表

    您可以在此处找到另一个解决方案,其中您有一个自定义包装器: How to map a nested value to a property using Jackson annotations?

    【讨论】:

      猜你喜欢
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      • 1970-01-01
      相关资源
      最近更新 更多