크리스의 개발일기

[JAVA] @RequestBody와 @ResponseBody 분석 본문

JAVA

[JAVA] @RequestBody와 @ResponseBody 분석

ChrisJang 2020. 11. 16. 09:06

서론 : 

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

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

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

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

 

 

 HTTP란?

데이터를 주고 받기 위한 프로토콜(약속)입니다.

- 아래의 사진과 같은 모양으로 HTTP body 부분에 XML(또는 JSON)이 들어갈 수 있습니다.

 

 

<그림1> HTTP body부분에 XML 데이터가 들어간 모

 

<그림2> HTTP body부분에 JSON 데이터가 들어간 모

@RequestBody 어노테이션이란?

- HTTP body안에 JSON을 VO에 맵핑하는 스프링 어노테이션

 @RequestBody 어노테이션을 이용하면 HTTP 요청 Body를 자바 객체로 전달받을 수 있다.

 

@ResponseBody 어노테이션이란?

- VO 객체를 JSON으로 바꿔서 HTTP body에 담는 스프링 어노테이션. 

- 메서드의 return 값을 HTTP Response의 body에 담는 역할을 합니다.

즉 요청한 형태에 맞춰서 메시지 변환기를 통해 결과값을 반환한다. @ResponseBody는 @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를 적어줘야 합니다. )

 

 

출처 : 

codelib.tistory.com/24#:~:text=%40ResponseBody%20%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98%EC%9D%B4%EB%9E%80%3F,%EB%A7%A4%ED%95%91%ED%95%98%EB%8A%94%20%EC%97%AD%ED%95%A0%EC%9D%84%20%ED%95%A9%EB%8B%88%EB%8B%A4.&text=%2F%2F%20HTTP%20%EC%9A%94%EC%B2%AD%EC%9D%98%20%EB%82%B4%EC%9A%A9,%EC%95%A0%EB%84%88%ED%85%8C%EC%9D%B4%EC%85%98%EC%9D%84%20%EC%84%A4%EC%A0%95%ED%95%9C%EB%8B%A4.

doctorson0309.tistory.com/406

devyj.tistory.com/3

Comments