1. @RequestParam
1개의 HTT 요청 파라미터를 받기 위해서 사용한다.
예제
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam String id) {
return "ID: " + id;
}
- @RequestParam을 이용해서 id 쿼리 매개변수를 추출한다.
속성
1. name
- 위의 예제에서는 변수 이름과 매개변수 이름이 동일한데, 이를 다르게 설정할 수도 있다.
@PostMapping("/api/foos")
@ResponseBody
public String addFoo(@RequestParam(name = "id") String fooId, @RequestParam String name) {
return "ID: " + fooId + " Name: " + name;
}
- 매개변수 앞에 @RequestParam(name = "id")를 추가해주면 된다.
2. required & defaultValue
- @RequestParam은 요청에 매개변수가 필수적이다. → @RequestParam(required = true)가 기본 설정이다.
- 해당 파라미터가 전송되지 않으면 400 Error을 반환한다.
- @RequestParam(required = false)로 설정하면 파라미터가 없어도 된다. → 이 경우 매개변수가 null로 바인딩된다.
- defaultValue를 통해 기본값을 설정할 수도 있다.
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false, defaultValue = "0") String id) {
return "ID: " + id;
}
2. @RequestBody
클라이언트가 전송하는 Json(application/json) 형태의 HTTP Body 내용을 Java Object로 변환해준다.
- 그렇기 때문에 Body가 존재하지 않는 Get 메소드에서 사용하면 에러가 발생한다.
- HTTP 요청 본문 데이터는 Spring에서 제공하는 HttpMessageConverter를 통해 타입에 맞는 객체로 변환된다.
- @RequestBody를 사용할 객체는 필드를 바인딩할 생성자나 setter 메서드가 필요 없다.
3. @ModelAttribute
클라이언트가 전송하는 multipart/form-data 형태의 HTTP Body 내용과 HTTP 파라미터 데이터를 Setter를 통해 Java 객체에 매핑한다.
- 객체의 필드에 접근해서 데이터를 바인딩할 수 있는 생성자 혹은 setter 메서드가 필요하다.
- Query String 및 Form 형식이 아닌 데이터는 처리할 수 없다.
📌 정리
- RequestParam
- 1개의 HTTP 파라미터를 얻기 위해 사용한다.
- 매개변수가 필수적으로 필요하다.
- 매개변수가 전달되지 않은 경우 400 에러가 발생한다.
- 설정을 통해 바꿀 수 있다.
- RequestBody
- Json으로 받은 HTTP Body 데이터를 HttpMessageConverter를 통해 변환한다.
- setter가 없어도 된다.
- ModelAttribute
- multipart/form-data 형태의 HTTP Body 내용과 HTTP 파라미터들을 Setter를 통해 1대 1로 객체에 바인딩시킨다.
- 매개변수의 바인딩을 받는 필드는 setter 함수가 있어야 한다.
출저 : https://velog.io/@mmy789/Spring-RequestParam-RequestBody-ModelAttribute-%EC%B0%A8%EC%9D%B4