Controller에서 List형식의 json 데이터를 받으려면 간단하게 @RequestBody Dto 내부에 리스트 Dto가 있으면 된다.
public class Dto {
private String name;
private String age;
// 자기자신을 List로
private List<Dto> dtoList;
}
이 떄 클라이언트에서는 다음과 같이 전송해야한다. dtoList: 를 빠뜨리지 않도록 주의한다.
{
"dtoList": [
{
"name": "han",
"age": 29
},
{
"name": "kim",
"age": 31
}
]
}
여기까지는 나도 아주 오래 사용했던 방식인데 한가지 문제가 생겼었다. 갑자기 바인드 오류가 나오는것..
cannot deserialize from Object value (no delegate- or property-based Creator); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException
이는 Dto 내부에 String 또는 Integer 하나만 존재할때인데(아마 다른 Wrapper class도 전부 해당될 것으로 보인다. Long같은거) Springboot 기본 바인딩인 jackson-databind에서 String, Integer 타입의 List는 jsonArray가 아닌 그냥 array를 지원하기 때문이었다..
그렇기에 Dto에 String 또는 Integer 필드 하나만 존재한다면
public class Dto {
private String name;
private Integer age;
private List<Child> child;
}
public class Child {
private String name;
}
이러한 경우에
{
"name": "han",
"age": 29
"child": [
{
"name": "kim"
},
{
"name": "han"
}
]
}
왠지 이렇게 보내야할것같지만 이건 오답이고
{
"name": "han",
"age": 29
"child": ["kim", "han"]
}
이렇게 보내면 된다.... 삽질하지마라.. 안녕..
이게 말이 되냐?
Juseong Han 님 좋은글 감사합니다. 퍼가도 될까요??