#java #jackson #lombok #rest-assured
#java #джексон #ломбок #будьте уверены
Вопрос:
Не удается десериализовать Json в коллекцию списков. Я использую Lombok, который содержит переменные поля:
@Data
@Builder
@EqualsAndHashCode(exclude = "success")
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class AparsersResponceDto {
private Integer success;
private ArrayList<String> data;
}
Восстановленный контроллер, выполняющий post-запрос к API:
public ValidatableResponse getFirstAparserStatus(AparsersDto toGetAparser) {
return RestAssured
.given().spec(getDefaultRequestSpecification())
.body(toGetAparser)
.when()
.post(apars141 port1)
.then()
.log().all();
}
И извлеките тело запроса post:
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"
],
...
Сообщение об ошибке Complite:
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"])
Как я могу это исправить?
Комментарии:
1. Сообщение об ошибке и ваш класс не совпадают. Состояние ошибки
ArrayList<StringBuilder>
, но в вашем классе нет ни одного члена с типомArrayList<StringBuilder>
. Является ли опубликованный код полным кодом.2. @KarthikeyanVaithilingam Извините, невнимательно скопировал. Уже исправил это и добавил дополнительную информацию.
3.
data
поле в вашем json не являетсяArayList
, оно выглядит какMap<String,List<String>>
.
Ответ №1:
data
в JSON не является ArrayList<String>
, вместо этого это Map<String,List<String>>
Поэтому измените свой DTO следующим образом.
@Data
@Builder
@EqualsAndHashCode(exclude = "success")
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class AparsersResponceDto {
private Integer success;
private Map<String,List<String>> data;
}