Đâ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.