2023.01.25 - [WEB/Spring] - [Spring]@RequestParam의 파라미터 사용의 이해
2022.12.26 - [Network] - [Network]REST, REST API
@RequestBody와 @RequestParam 비교하여 이해하기
지난 시간에는 클라이언트에서 서버로의 요청 시에 HTTP 요청 파라미터를 컨트롤러 메소드의 파라미터로 전달받을 때 사용되는 @RequestParam 어노테이션에 대해 포스팅하였습니다. 이번 포스팅에는 클라이언트로부터 받은 요청을 객체로 바인딩하기 위해 사용한다는 것은 @RequestParam과 같지만, 또 다른 용도로 사용되는 @RequestBody 어노테이션에 대해 알아보고 비교하는 시간을 갖도록 하겠습니다.
@RequestBody란?
클라이언트가 서버로 전송하는 Http 요청의 Body의 내용을 JavaObject로 변환시켜주는 어노테이션입니다. 클라이언트가 Json 형식의 데이터를 Http Body에 담아 서버로 보낼 때 변환을 해주지 않는다면 Java 단에서 데이터의 인식을 할 수 없을 것 입니다. 이러한 Object의 변환을 위해 @RequestBody 어노테이션을 선언해주면 Spring의 MessageConverter 중 하나인 MappingJackson2HttpMessageConverter를 통해 Java 객체로의 변환이 이루어 집니다.
💥참고
Get, Delete와 같은 Http 통신 방법에는 Http Body가 없기 때문에 @RequestBody 어노테이션 사용 불가
@RequestBody와 @RequestParam의 차이
@RequestParam과 마찬가지로 요청 파라미터를 객체로 바인딩하기 위해 사용됩니다. 하지만 어떤 것을 바인딩하는 것에 대해 @RequestParam과 @RequestBody의 차이가 있습니다. @RequestParam은 URL에 요청 파라미터를 바인딩하지만 , @RequestBody는 Http Body에 있는 내용을 Java - Object로 반환합니다. 아래 비교 코드를 한번 살펴 보겠습니다.
@RequestBody와 @RequestParam 비교 코드
@Controller
public class RequestParamController {
//localhost:8080/requestParam?param=requestparam
@PostMapping("/requestParam")
public String param(@RequestParam String param) {
System.out.println(param);
return param;
}
}
// 쿼리 스트링
// localhost:8080/requestParam?param=requestparam
// 결과
// requestparam
@Controller
public class RequestBodyController {
@PostMapping("/requestBody")
public String age(@RequestBody String param) {
System.out.println(param);
return param;
}
}
// Http Body
// {
// param: "requestBody"
// }
'WEB > Spring' 카테고리의 다른 글
[Spring]스프링 배치(Batch)란? (8) | 2023.02.20 |
---|---|
[Spring]DI와 Autowired 확실히 알고 사용하기 (4) | 2023.01.31 |
[Spring]DTO와 VO의 모호한 사용, 확실하게 사용하기 (7) | 2023.01.30 |
[Spring]@Controller VS @RestController (4) | 2023.01.30 |
[Spring]@RequestParam의 파라미터 사용의 이해 (7) | 2023.01.25 |