스프링 @ResponseBody

지찬우·2023년 1월 27일
0

Knowing

목록 보기
4/10
post-thumbnail

@ResponseBody 애노테이션

연구실 서비스 프로젝트를 진행하다가 @ResponseBody 애노테이션을 사용하는 이유가 궁금해졌다. 애노테이션 선언부로 들어가 보면 다음과 같은 설명이 있다.

Annotation that indicates a method return value should be bound to the web response body. Supported for annotated handler methods.

‘해당 메서드의 return 값은 반드시 웹 response body에 바인딩 되어야 한다.’ HTTP 응답 메시지 바디에 return 값이 담긴다는 의미일 것이다.

그동안 이 프로젝트뿐만 아니라 다른 프로젝트에서도 @ResponseBody 애노테이션을 사용한 적이 없는 것 같다. 그럼에도 불구하고 HTTP 메시지 바디에 반환값이 잘 담겨 전달되었다. 그럼 굳이 이 애노테이션이 필요 없는 것 아닌가 싶었다.

@ResponseBody 설명 주석의 함께 보기에 @RequestBody@RestController가 있다. 왜냐. @RestController 선언부로 들어가 보면 @ResponseBody가 붙어있는 것을 알 수 있다. 난 그동안 @RestController를 사용해 개발했기 때문에 자연스럽게 HTTP 메시지 바디에 값이 담겼던 것이다.


@Controller에는 해당 애노테이션이 없다.

@ResponseBody@Controller로 지정한 경우, 필요한 상황에 사용할 수 있는 애노테이션인가 보다. @Controller에서 데이터를 메시지 바디에 실어 응답하고 싶은 경우에는 @ResponseBody 애노테이션을 사용해야 한다.


@ResponseBody를 사용하지 않는 경우

@Controller
@RequestMapping("/api/v1/test")
public class TestController {

    @RequestMapping
    public ResponseTestDTO test() {
        return new ResponseTestDTO("ㅋㅋ", 24);
    }
}

404 Not Found. 리소스를 찾을 수 없다고 응답한다.


@ResponseBody를 사용한 경우, JSON 데이터가 body에 담겨 온 것을 확인할 수 있다.


역시 이렇게 하나하나 알아가는 재미가 쏠쏠한 것 같다 😄

profile
좋은 개발자가 되자.

0개의 댓글