본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Spring framework

Spring RequestBody RequestParam(스프링 RequestParam RequestBody)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2020. 11. 17.

전자정부 프레임워크나 스프링(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에 대해서 정리하여 보았습니다.

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글