首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从OData V2实体获取嵌套的“results”列表

从OData V2实体获取嵌套的“results”列表
EN

Stack Overflow用户
提问于 2021-02-26 08:50:00
回答 1查看 38关注 0票数 0

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

代码语言:javascript
复制
{
    "d": {
        "EmployeeID": 1,
        "LastName": "Davolio",
        "FirstName": "Nancy",
        "Orders": {
            "results": [
                {
                    "OrderID": 10258
                }
            ]
        },
        "Territories": {
            "results": [
                {
                    "TerritoryID": "06897"
                }
            ]
        }
    }
}

我有相应的模型Class:

代码语言:javascript
复制
@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“属性而直接获取列表吗?在这种情况下,是否真的需要自定义的反序列化程序或包装器类?

谢谢!

EN

Stack Overflow用户

回答已采纳

发布于 2021-02-26 09:24:48

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

一种方法是创建一个包装类,并让Employee直接引用它。

例如:

代码语言:javascript
复制
public class WrapperDto implements Serializable {
    @JsonProperty("results")
    private List elements;
}
代码语言:javascript
复制
public class Employee {
...
    @JsonProperty("Orders")
    private WrapperDto orders;
    
    @JsonProperty("Territories")
    private WrapperDto territories;
...
}

当您想要获取订单时,您必须调用orders.getResults()来获取列表

另一种解决方案可以在这里找到,其中你有一个自定义的包装器:Jackson 如何使用Jackson annotations?将嵌套值映射到属性

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66378608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档