Controller에서 사용되는 @RequestBody와 @ResponseBody에 대해서 알아보겠습니다.

@RequestBody: HTTP Body에 담겨온 정보를 JSON 형식으로 변환하여 객체와 맵핑해주는 역할을 합니다.

@ResponseBody:  HTTP Body에 정보를 전달하기 전에 객체를 JSON 형식으로 변환하여 보내주는 역할을 합니다.

 

@RequestBody를 사용한 코드를 보겠습니다.

{
    "size"10,
    "description""hi"
}
위와 같은 JSON 형식의 데이터를 서버에게 전송했을 때 @RequestBody를 붙인 객체와 맵핑을 진행합니다. 
(단 JSON과 맵핑되기 위해선 필드명이 같아야 합니다. 다르면 맵핑되지 않습니다.)
@GetMapping("/requestBody")
public String requestBody(@RequestBody Test test) {
    return test.getSize()+" "+test.getDescription();
}

@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Test{
    int size;
    String description;
}

@ResponseBody를 사용한 코드를 보겠습니다. 

{
    "size"10,
    "description""hi"
}
위와 같은 데이터를 보내기 위해서는 String형태로 Body에 담아서 보내야 합니다. 하지만 Method단 혹은 Class단에 @ResponseBody를 붙이면 객체를 보내면 변환해서 보내줍니다.
(마찬가지로 클라이언트단에서 정의된 변수명이 같아야 합니다.)
// Method단 @ResponseBody 적용
@Controller
public class ParentController {

    @GetMapping("/responseBody")
    @ResponseBody
    public Test responseBody() {
        Test test = new Test(10, "hi");
        return test;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Test{
        int size;
        String description;
    }
}

// class단 @ResponseBody적용
@ResponseController // @ResponseBody + @Controller로서 Controller의 모든 Method에 @ResponseBody가 적용됩니다.
public class ParentController {

    @GetMapping("/responseBody")
    public Test responseBody() {
        Test test = new Test(10, "hi");
        return test;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Test{
        int size;
        String description;
    }
}

지금까지 @ResponseBody와 @RequestBody를 알아봤습니다. 지금까지 SpringBoot MVC 파헤치기 3~7까지 MVC에서 사용하는 어노테이션들에 대해서 알아봤습니다. 다음은 알아본 어노테이션들이 어떻게 작동하는지 알아보겠습니다. 감사합니다.