안녕하세요.
오늘은 @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 에 대하여 알아보았습니다.!
감사합니다.
'Spring' 카테고리의 다른 글
springboot 이상적인 폴더 구조 (0) | 2023.09.18 |
---|---|
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. (0) | 2023.08.01 |
SpringBoot + WebSocket server 간단하게 구현해보기 (18) | 2023.05.26 |
SpringBoot Paging(페이징)에서 제공하는 변수 커스터마이징 하기. (1) | 2023.05.11 |
Springboot + chatGPT API 연동해보기. (9) | 2023.04.24 |