WEB/Spring

[Spring]@RequestBody와 @RequestParam 비교하여 이해하기

MoonSta 2023. 1. 27. 11:20

2023.01.25 - [WEB/Spring] - [Spring]@RequestParam의 파라미터 사용의 이해

 

[Spring]@RequestParam의 파라미터 사용의 이해

@RequestParam 클라이언트에서 서버로의 요청 시에 HTTP 요청 파라미터를 컨트롤러 메소드의 파라미터로 전달받을 때 사용된다. 클라이언트가 전달하는 쿼리 변수를 1:1로 매핑해준다. @RequestParam 단

mooonstar.tistory.com

2022.12.26 - [Network] - [Network]REST, REST API

 

[Network]REST, REST API

❓REST란? “Representational State Transfer”의 약자로 자원의 표현으로 구분하여 해당 자원의 정보를 주고받는 방식을 의미합니다. 이런 의미로만 해석한다면 이해하기가 어려울 수 있습니다. 간단하

mooonstar.tistory.com

@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"
//	}