1. RequestBody
Http 요청으로 넘오는 body 데이터를 HttpMessageConverter를 통하여 Java Object로 역직렬화를 하며
multipart 요청이 아닌, 어떤 바이너리 파일을 포함하고 있지 않은 데이터를 받는 역할을 한다.
HttpMessageConverter란
Http 요청과 응답에 대해 '전략 패턴' 을 사용하 converting(반환) 해주는 역할이다.
'전략 패턴'은 하나의 메서드가 여러 가지의 대응 방법을 미리 준비해두고
필요한 상황마다 대응 방법을 달리하는 것을 말한다.
RequestBody의 경우 Http 요청으로 넘오올때 Header의 Content-type을 보고 어떤 Converter를 사용할지 정한다.
이에 Content-type 아래와 같이 명시해줘야한다.
application/json : {key : value} 형태 전송
application/x-www-form-urlencoded : key=value&key=value 형태로 전송
multipart/form-data : 파일 업로드시 사용되고 '파일을 비롯한 여러 데이터가 있다' 라고 명시해준다.
2. RequestPart
Content-type 이 'multipart/form-data' 의 경우 사용된다.
MultipartFile이 포함되는 경우에 MultiPartResolver가 동작한다.
MultipartFile이 포함되지 않는 경우 @RequestBody와 같이 HttpMessageConverter가 동작하게 된다
3. RequestParam
1개의 파라미터 데이터를 받을 경우 사용된다.
무조건 데이터가 들어오게 설정되어 있기에 파라미터가 들어오지 않는 경우 BadRequest가 발생하며
들어올지 정확하지 않다면 required = false를 지정해주어야한다.
(default 값이 required = true 이다.)
RequestParam 또한 RequestPart 와 같이 MultipartFile을 받을 때 사용한다.
RequestPart와 다른점으로는 RequestParam의 경우 파라미터 값이 String 이나 MultipartFile이 아닌경우
Converter OR PropertyEditor 로 처리되지만
RequestPart 는 HttpMessageConverter를 이용하며 Content-type을 참고한다.
4. ModelAttribute
Spring Controller에서 값을 받을때 default가 @ModelAttribute 이며 사용은 아래와 같이 사용한다.
Content-type이 Multipart/form-data 형태를 받을때
Http 파라미터를 받을때
사용에 대해 알 수 있듯이 Http Body로 오든 파라미터로 오든 모두 받을 수 있고
body와 파라미터가 같이 오는 경우도 값을 받아온다.
이런 형태로 사용이 가능한 이유는 @ModelAttribute는
필드 내부와 1:1 값이 Setter로 Constructor를 통해 매핑되기 때문이다.
@RequestPart와 다른 점으로는 HttpMessageConverter에 의해 값이 바인딩되는 것이 아니라
Setter OR Constructor를 통해 값이 주입된다.
'추가 공부 > Web' 카테고리의 다른 글
[Spring] Lombok 정리 (4) | 2024.10.27 |
---|---|
[FTP] Spring File Upload 방법 (1) | 2024.10.25 |
Chart.js 적용법과 특징 (2) | 2024.10.04 |
Spring boot 사전 지식 채우 (2) | 2024.09.29 |
CKEditor5 사용해보기 2 (1) | 2024.09.17 |