【问题标题】:ObjectMapper with nested object具有嵌套对象的 ObjectMapper
【发布时间】:2021-06-05 10:35:32
【问题描述】:

我有一个带有数组的 JSON 响应,但没有映射和抛出错误,我该如何处理这样的 JSON


{
"total":10,
"count":10,
"start":0,
"items":[
{
"ID":"Hyd4VVGtCNpyLh7JEOL3X-b92yollu9nb3KbweWxNaI=@mailhog.example",
"From":{"Relays":null,"Mailbox":"emails","Domain":"gmail.com","Params":""},
"To":[{"Relays":null,"Mailbox":"test","Domain":"gmail.com","Params":""}],
"Content":{"Headers":{"Content-Type":["multipart/mixed; \tboundary=\"----=_Part_27_47303298.1622881481751\""],
"Date":["Sat, 5 Jun 2021 11:24:42 +0300 (EEST)"],
"From":["test@gmail.com"],
"MIME-Version":["1.0"],

我试着像这样映射

 public static class ResponseDto{
        Integer total;
        Integer count;
        Integer start;
        List<ItemDto> items;
//getters,setters
}

public static class ItemDto{
        String id;
}

我得到一个错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ID" (class package.api.utils.ApiMailHogUtil$ItemDto), not marked as ignorable (one known property: "id"])
 at [Source: (StringReader); line: 1, column: 50] (through reference chain: package.api.utils.ApiMailHogUtil$ResponseDto["items"]->java.util.ArrayList[0]->package.api

我做错了什么?

【问题讨论】:

  • @JsonProperty('ID')注释Java属性。
  • @MichalFoksa 似乎工作,谢谢。但是为什么总、计数、开始工作没有注释呢?
  • Json 和 Java 属性必须根据配置的命名策略匹配。默认命名策略是LOWER_CAMEL_CASE(例如lowerCamelCase),因此totalcountstartmatch,但是IDDate,不会,除非您为@选择不同的命名策略987654335@,例如UPPER_CAMEL_CASE - 尽管您不会完全避免@JasonProperty 注释。
  • 搜索“objectmapper命名策略”

标签: java json objectmapper


【解决方案1】:

正如评论,Jackson 没有找到“ID”字段,因此它会引发异常。您可以在ItemDtoid 字段顶部添加@JsonProperty("ID")

public static class ItemDto{
        @JsonProperty("ID")
        String id;
        // other fields
}

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2019-08-03
    • 2018-07-24
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多