【问题标题】:Cannot deserialize instance of `java.util.ArrayList<java.lang.Object>` out of START_OBJECT token无法从 START_OBJECT 令牌中反序列化 `java.util.ArrayList<java.lang.Object>` 的实例
【发布时间】:2021-03-26 23:13:06
【问题描述】:

无法将 Json 反序列化为 List 集合。我正在使用 Lombok,它包含字段变量:

@Data
@Builder
@EqualsAndHashCode(exclude = "success")
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class AparsersResponceDto {
  private Integer success;
  private ArrayList<String> data;
}

向 API 发布请求的 RestAssured 控制器:

public ValidatableResponse getFirstAparserStatus(AparsersDto toGetAparser) {
    return RestAssured
            .given().spec(getDefaultRequestSpecification())
            .body(toGetAparser)
            .when()
            .post(apars141 + port1)
            .then()
            .log().all();
}

并提取帖子请求的正文:

private AparsersController aparsersController = new AparsersController();


public AparsersResponceDto postFirstBody(AparsersDto aparsersDto) {
    return aparsersController
            .getFirstAparserStatus(aparsersDto) //Sent post request with the body aparsersDto through RestAssured
            .statusCode(200)
            .extract().body().as(AparsersResponceDto.class); // Here i can't make extract of the 'data' field due to collection List. 
}

响应 Json:

"success": 1,
"data": {
    "45.90.34.87:59219": [
        "http"
    ],
    "144.76.108.82:41049": [
        "http"
    ],
    "5.9.72.48:59473": [
        "http"
    ],
    "130.0.232.208:49327": [
        "http"
    ],
    "217.172.179.54:39492": [
        "http"
    ],
    ...

完整的错误信息:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList<java.lang.Object>` out of START_OBJECT token at [Source: (StringReader); line: 1, column: 21] (through reference chain: com.rest.dto.AparsersResponceDto["data"])

我该如何解决?

【问题讨论】:

  • 错误信息和你的类不匹配。错误状态 ArrayList&lt;StringBuilder&gt; 但您的班级没有任何类型为 ArrayList&lt;StringBuilder&gt; 的成员。贴出来的代码是不是完整的代码。
  • @KarthikeyanVaithilingam 抱歉,不小心复制了。已经修复它并添加更多信息。
  • data json 中的字段不是ArayList 它看起来像Map&lt;String,List&lt;String&gt;&gt;

标签: java jackson lombok rest-assured


【解决方案1】:

JSON 中的data 不是ArrayList&lt;String&gt;,而是Map&lt;String,List&lt;String&gt;&gt;

所以如下改变你的 DTO。

@Data
@Builder
@EqualsAndHashCode(exclude = "success")
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class AparsersResponceDto {
   private Integer success;
   private Map<String,List<String>> data;
}

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2017-09-22
    • 2020-02-20
    • 2018-02-03
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多