DTO 사용에대해 궁금합니다.
늦었지만 혹시 구글 검색을 통해 들어오신 분들을 위해 추가적으로 답변드립니다. DTO와 같은 모델에 setter가 없는 경우 다음과 같이 데이터 바인딩을 합니다. 결론부터 말씀드리면, 기본 생성자를 제거해야 합니다 . 아래 글은 제가 작성한 블로그의 내용을 좀 발췌했습니다. ... 다음과 같은 방법 중 하나로 인스턴스화됩니다. - @ModelAttribute 메소드에 의해 추가되었을 수 있는 모델을 탐색한다. - 만약 model attribute가 클레스 레벨에 @SessionAttribute 어노테이션이 붙었는지 Http Session을 통해 탐색한다 - model의 속성 이름과 path variable, request parameter와 같은 request 값이 매치되는 경우 컨버터를 얻는다. - 기본 생성자를 통해 인스턴스화한다. - 서블릿 request 파라미터들의 이름과 가장 일치하는 인자가 있는, 적절한 생성자를 통해 (primary constructor) 인스턴스화된다 . 인자의 이름은 JavaBeans의 @ConstructorProperties 또는 바이트코드의 런타임 시 존재하는(runtime-retained) 파라미터의 이름을 통해 결정된다. 만약 컨트롤러에서 DTO가 데이터바인딩이 되지 않을 경우, DTO에 기본 생성자 및 관련 어노테이션이 있는지 확인하셔야 합니다. 만약 있다면 제거해주세요.