본문 바로가기

Spring

@RequestBody 와 @ResponseBody 란?

728x90
반응형
SMALL

안녕하세요.

 

오늘은 @RequestBody 와 @ResponseBody 에 대해 간단하게 알아보도록 하겠습니다.

 

이 두개의 어노테이션을 알기 전 기본적으로 HTTP 에 대해 알고계셔야 합니다.

 

HTTP 에 대하여 간단하게 설명을 드리면

 

HTTP(Hypertext Transfer Protocol)

 

인터넷 통신에서 데이터를 주고 받기 위한 규칙을 정한 약속입니다.

 

데이터를 주고 받기 위해선, '이런 방식'으로 해야한다. 라는것을 약속한 게 HTTP 입니다.

 

POST /userInfo
Host: www.example.com
Content-Type: applicationjson
Content-Length: 35
{
	"userInfo":
	{
		"userName":"honggildong",
		"userNickname":"Mr. Hong"
	}
}

위의 코드와 같이. 초록색 부분에 실질적으로 데이터가 들어갑니다.

이부분이 HTTP BODY 부분으로 JSON 형태로 데이터가 들어 갈 수 있습니다.

 

이제 본론적으로  @RequestBody 와 @ResponseBody 에 대해 알아 보도록 하겠습니다.

 

@RequestBody 란

 

HTTP BODY 안에 들어있는 JSON 형식을  ->  자바의 VO에 매핑해주는 스프링의 어노테이션 입니다.

 

UserInfo.java  (VO에 해당함.)

@Getter
public class UserInfo {
    private String name;
    private String nickName;
}

UserController.java

@GetMapping("/userInfo")
public void getUserInfo(@RequestBody UserInfo userInfo){
    log.info("userInfo : {}",userInfo);
    log.info("userInfo, Name : {}", userInfo.getName());
    log.info("userInfo, NickName : {}", userInfo.getNickName());
}

위의 코드처럼 @RequestBody를 붙여주면, 클라이언트로부터 HTTP 요청이 들어오면 HTTP BODY에 존재하는 JSON 데이터를

자바의 VO로 받을수 있도록 매핑해주는 역할을 해줍니다.

@Getter 를 이용하여, 값을 꺼내보면

데이터 값이 정상적으로 매핑 되는 것을 볼 수 있습니다.

(postman 으로 body에 값을 실어서 요청 했습니다.)



@RequestBody를 이제 사용할 줄 아신다면,

    userInfo.setName(request.getParameter("name"));
    userInfo.setNickName(request.getParameter("nickName"));

이렇게 코드를 짜지 않아도 됍니다. ㅋㅋ

 

 

@ResponseBody 란

 

@RequestBody와 반대로 VO -> JSON 형태로 변환해서 HTTP BODY에 담는 어노테이션 입니다.



 

 @ResponseBody
    @GetMapping("/userInfo")
    public UserInfo getT(@RequestBody UserInfo userInfo) {
        log.info("userInfo : {}", userInfo);
        log.info("userInfo, Name : {}", userInfo.getName());
        log.info("userInfo, NickName : {}", userInfo.getNickName());
        return userInfo;
    }

이런식으로 메소드 위에 적어주면(@ResponseBody)

VO가 return 하도록 해주면, HTTP BODY에 JSON 으로 변환 후 담아주게 합니다.

 

 

 

@ResponseBody 생략할 수 있나?

 

 -> 네 생략할수 있습니다.

 

결론 먼저 말씀드리면, @RestController를 사용하시면 됍니다.

 

@RestController를 사용하면 리턴값에 자동으로 @ResponseBody가 붙도록 해줍니다.

 


@RestController
...

@GetMapping("/userInfo")
public UserInfo getT(@RequestBody UserInfo userInfo) {
    log.info("userInfo : {}", userInfo);
    log.info("userInfo, Name : {}", userInfo.getName());
    log.info("userInfo, NickName : {}", userInfo.getNickName());
    return userInfo;
}

이런 식으로 말이죠.

 

 

이상으로 @RequestBody 와 @ResponseBody 에 대하여 알아보았습니다.!

 

 

감사합니다.

728x90
반응형
LIST