@ResponseBody, @RequestBody

민지킴·2021년 5월 3일
0

예를들어 웹페이지에서 json으로 request한 파라미터들을 java에서 받으려면 java object로의 변환이 필요하며

마찬가지로 response 시에도 java object에서 json으로 변환이 필요하다.

이러한 작업들을 해주는 어노테이션이 바로 @RequestBody 와 @ResponseBody 이다.

컨트롤러에 두 어노테이션을 추가해주면, JSON이나 key/value 방식 xml 등으로 송수신 할 수 있다.

@RequestBody 어노테이션이란?

HTTP 요청의 body 내용을 자바 객체로 매핑하는 역할을 합니다.

@RequestBody 어노테이션은 요청에서 Body부분을 살펴 요청된 데이터를 추출하여 파라미터로 변환해주는데, ‘GET’ 메소드 요청의 경우에는 HTTP Body에 요청이 전달되는 것이 아니라, URL의 파라미터로 전달 (ex: http://localhost:8080/test?id=admin&name=hanq…) 형식으로 전달되기 때문에 @RequestBody로 받으려고 해도 서로 다른 곳을 보며 데이터가 없다는 결과를 던질 수 밖에 없다.

@ResponseBody 어노테이션이란?

자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할을 합니다.

예제소스

@RestController
public class LoginWebController 
{
 
    // HTTP 요청의 내용을 Member 객체에 매핑하기위해 @RequestBody 애너테이션을 설정한다.
    @RequestMapping(value="/member/login", method = RequestMethod.POST)
    public MemberResultDto login(@RequestBody Member member) 
    {
    MemberResultDto memberResultDto = memberService.login(member); 
    return memberResultDto;
 
    }
}
  • 위의 예제 소스에서는 HTTP 요청의 body안에 Member 데이터를 파라미터로 받기위해,

    @RequestBody를 사용하였습니다.

    @ResponseBody를 사용하지 않은 이유는 @RestController를 사용하였기 때문입니다.

    @Controller와는 다르게 @RestController는 리턴값에 자동으로

    @ResponseBody를 붙게되어 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달됩니다.

    ( ※ @Controller인 경우에는 @ResponseBody를 적어줘야 합니다. )

pom.xml 설정

   <dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
     	<artifactId>jackson-core</artifactId>
	<version>2.9.3</version>
   </dependency>
   <dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.9.3</version>
   </dependency>
   <dependency>
	<groupId>com.fasterxml.jackson.core</groupId>	
   	<artifactId>jackson-databind</artifactId>
	<version>2.9.3</version>
   </dependency>
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글