전자정부 프레임워크나 스프링(Spring) 프레임 워크로 개발을 하다보면 사용자(Client)의 요청을 쉽게 받기위한 방법이 필요 합니다.
일반적으로를 Request객체에서 getAttribute 메소드를 호출하는 방식으로 사용되지만, 좀더 편하게 하려면 RequestBody 에노테이션이나 RequestParam 에노테이션을 사용 합니다.
먼저 RequestParam 에노테이션을 활용해서 요청된 request객체를 매핑하는 모습의 메소드 입니다.
@RequestMapping(value="요청")
@ResponseBody
public String request1(@RequestParam HashMap<Object, Object> param) {
return "hello";
}
조금더 상세한 설명입니다.
1. HTTP Request 파라미터를 Handler메소드의 파라미터 타입에 전달받을 때 사용 합니다.
2. Handler 메소드의 파라미터 타입이 단순한 형태이고, parameter로 먼저 변환(resolve)되고 이후에 attribute로 변환(resolve) 됩니다.
3. RequestParam 값이 단순 문자(String)아닌 경우 자동으로 해당 값으로 변환됩니다.
내용을 간추려보면, 사용자(Client)의 요청에 대해서 알아서 파라미터와 속성을 구분하여 주어진 값에 대해서 변환을 해준다는 내용입니다.
그러므로 위 코드에서 HashMap으로 값을 지정 하였으므로 param 변수의 get 메소드를 통해서 요청한 값을 가져 올 수 있습니다.
그러면 이제 RequestBody를 살펴보겠습니다.
@RequestMapping(value="요청2")
@ResponseBody
public String request2(@RequestBody HashMap<Object, Object> param) {
return "hello";
}
사용법은 아무리 보아도 위 RequestParam 에노테이션과 다르지가 않습니다.
1. HTTP Request body를 읽고 메시지 컨버터를 통해서 직렬화를 시켜 Handler 메소드의 인자 타입의 객체로 변환 합니다.
2. 요청된 값의 Body가 존재 하여야 합니다.
3. MVC Config의 Message Converters 옵션을 사용함으로써 메시지 변환을 설정 및 관리 할 수 있습니다.
내용이 어렵지만 핵심인 부분은, 사용자의 요청은 반드시 Body가 존재해야 한다는 점 입니다.
Http 프로토콜에서 Body가 존재하려면 POST요청을 해야 하므로 GET방식으로 요청을 하게되면 400에러 같은 "부적절한 방법" 오류가 나타나게 될 것 입니다.
성능상 크게 차이는 없습니다.
또한 다른 사이트에서는 JSON 및 XML요청을 할 때는 RequestBody 에노테이션을 반드시 사용해야 한다고 하고 있습니다.
그런데..여태껏 진행해온 프로젝트에서 RequestParam 에노테이션으로 값을 잘만 받고 있기 때문에,
"JSON 및 XML요청을 할 때는 RequestBody 에노테이션을 사용!" 이라는 내용은 스프링 버전에 따라서는 해당 내용에 대해서 주의 해야될 필요가 있나봅니다.
간단하게 스프링(Spring)에서의 RequestBody와 RequestParam에 대해서 정리하여 보았습니다.
'Spring framework' 카테고리의 다른 글
Spring RSS Feed 기능 만들기(전자정부 RSS Feed) (0) | 2021.05.31 |
---|---|
Spring RequestBody, RequestParam의 컨트롤러(Controller) (0) | 2020.12.07 |
Spring 컴포넌트 스캔(Spring component scan, RootContext와 ServletContext)에 대한 간단 정리 (0) | 2020.07.28 |
스프링, 전자정부 프레임워크에서 중복 로그인 확인하기(HttpSessionListener 사용) (0) | 2020.04.29 |
Spring HttpSessionListener를 활용한 세션 중복값 체크(중복 로그인 방지, 전자정부 중복 로그인) (2) | 2020.04.13 |
댓글