RequestParam
- query parameter, form-data를 받을 수 있다.
- 단일 파라미터를 받을 수 있다.
- 필수가 아닐 경우
default value
를 지정해줄 수 있다.
- Map으로 받는 것도 가능하다. 이 경우 Map<String, String>으로 name과 value 값이 바인딩 된 Map을 받는다.
ModelAttribute
- form-data만 받을 수 있다.
- 전달받은 form-data를 파싱하여 객체를 생성한다.
- 반드시 생성자가 있어야한다. 생성자와 Setter를 사용해서 객체를 생성한다. 구체적인 사항은 다음과 같다.
- 기본 생성자가 public일 경우 기본생성자로 생성
- 기본생성자 & 그 외 생성자 2개 이상 -> 무조건 기본 생성자로 생성하고 setter로 binding
- setter 없으면 property null로 바인딩
- 기본생성자 & 그 외 생성자 1개 -> 그 외 생성자로 생성 + 빈 값 setter로 binding
- setter 없으면 생성자로 할당되지 않은 property null로 바인딩
- 기본생성자 X & 그 외 생성자 1개 -> 그 외 생성자로 생성 + 빈 값 setter로 binding
- 기본생성자 X & 그 외 생성자 2개 이상 -> 기본 생성자 오류 Exception
RequestBody
- JSON, XML 을 받을 수 있다.
- reflection을 사용해서 역직렬화하기 때문에 setter, 생성자가 필요 없다.
- 그러나 반드시
기본 생성자
는 필요한데, 내부에서 jackson 라이브러리
의 ObjectMapper
를 사용하기 때문이다.
- ObjectMapper는 기본 생성자가 없으면
delegate
로 객체를 생성한다.
@Delegate(Lombok)
가 있으면 해당 속성을 가진 멤버의 메서드를 객체 외부에서 사용할 수 있다.
참고
RequestParam - Spring API
@RequestBody에 왜 기본 생성자는 필요하고, Setter는 필요 없을까?
@Delegate - Lombok