Đây là 1 trường hợp hiếm gặp nhưng cũng không phải là không có.
- Khi value là 1 phần tử dạng object
{
"result": {
"date": "20-7-2022",
"value": 1
}
}- Khi value là nhiều phần tử dạng array
{
"result": [
{
"date": "20-7-2022",
"value": 1
},
{
"date": "2-8-2022",
"value": 2
}
]
}Jackson hỗ trợ việc tự detect xem cái đó là 1 phần tử hay nhiều phần tử rồi gom chung lại hết thành List. Nếu chỉ là 1 phần tử thì sẽ là 1 List có 1 phần tử.
import com.fasterxml.jackson.annotation.JsonFormat;
import io.restassured.response.Response;
import lombok.Data;
import org.junit.jupiter.api.Test;
import java.util.List;
import static io.restassured.RestAssured.given;
public class MappingJacksonTest {
@Data
static class Wrapper {
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
public List<Result> result;
}
@Data
static class Result {
public String date;
public int value;
}
@Test
void name() {
Response res = given().get("https://extendsclass.com/mock/rest/172d73cdc37983f088b057b64047da5c/1");
Wrapper wrapper = res.as(Wrapper.class);
System.out.println(wrapper.getResult().get(0).getDate());
}
@Test
void name2() {
Response res = given().get("https://extendsclass.com/mock/rest/172d73cdc37983f088b057b64047da5c/2");
Wrapper wrapper = res.as(Wrapper.class);
System.out.println(wrapper);
}
}- Bạn cần đánh dấu
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)vào field nào muốn Jackson chú ý đến. Trong ví dụ là fieldresult, sau đó Jackson sẽ tự làm phần còn lại.