Spring에서는 클라이언트로부터 받은 요청을 바인딩할 때 @RequestParam
, @RequestBody
, @ModelAttribute
등을 사용한다.
오늘은 세 가지 어노테이션에 대해 자세히 알아보고, 차이점도 비교해보려고 한다.
@RequestParam
1개의 HTTP 요청 파라미터를 받기 위해서 사용한다.
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam String id) {
return "ID: " + id;
}
@RequestParam
을 이용해서 id
쿼리 매개변수를 추출한다.name
@PostMapping("/api/foos")
@ResponseBody
public String addFoo(@RequestParam(name = "id") String fooId, @RequestParam String name) {
return "ID: " + fooId + " Name: " + name;
}
@RequestParam(name = "id")
를 추가해주면 된다.required & defaultValue
@RequestParam
은 요청에 매개변수가 필수적이다. → @RequestParam(required = true)
가 기본 설정이다. @RequestParam(required = false)
로 설정하면 파라미터가 없어도 된다. → 이 경우 매개변수가 null
로 바인딩된다.defaultValue
를 통해 기본값을 설정할 수도 있다.@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false, defaultValue = "0") String id) {
return "ID: " + id;
}
@RequestBody
클라이언트가 전송하는 Json(application/json) 형태의 HTTP Body 내용을 Java Object로 변환해준다.
HttpMessageConverter
를 통해 타입에 맞는 객체로 변환된다.@RequestBody
를 사용할 객체는 필드를 바인딩할 생성자나 setter 메서드가 필요 없다.@ModelAttribute
클라이언트가 전송하는
multipart/form-data
형태의 HTTP Body 내용과 HTTP 파라미터 데이터를 Setter를 통해 Java 객체에 매핑한다.
🔗 관련 강의 자료
📌 정리
RequestParam
- 1개의 HTTP 파라미터를 얻기 위해 사용한다.
- 매개변수가 필수적으로 필요하다.
- 매개변수가 전달되지 않은 경우 400 에러가 발생한다.
- 설정을 통해 바꿀 수 있다.
RequestBody
- Json으로 받은 HTTP Body 데이터를
HttpMessageConverter
를 통해 변환한다.- setter가 없어도 된다.
ModelAttribute
- multipart/form-data 형태의 HTTP Body 내용과 HTTP 파라미터들을 Setter를 통해 1대 1로 객체에 바인딩시킨다.
- 매개변수의 바인딩을 받는 필드는 setter 함수가 있어야 한다.
https://mangkyu.tistory.com/72?category=761302
https://www.baeldung.com/spring-request-param
https://tecoble.techcourse.co.kr/post/2021-05-11-requestbody-modelattribute/
https://parkadd.tistory.com/70