Blog

Spring의 @Controller와 @RestController 차이

@Controller와 @RestController는 반환값을 처리하는 방식이 다릅니다. 뷰를 찾는 데 쓸지, HTTP 응답 본문에 쓸지를 기준으로 구분하면 됩니다.

당시에는 @RestController는 REST API용, @Controller는 MVC용이라고 나눠 생각했지만 둘 다 Spring MVC에서 사용할 수 있습니다.

@Controller: 요청을 처리하는 컨트롤러

@Controller는 해당 클래스가 컨트롤러 역할을 한다는 것을 Spring에 알립니다. Spring MVC에서는 DispatcherServlet이 요청을 적절한 컨트롤러 메서드로 연결합니다.

메서드가 문자열을 반환하고 @ResponseBody가 없다면 일반적으로 그 문자열을 뷰 이름으로 해석해 화면을 만드는 템플릿을 찾습니다. 컨트롤러의 모든 반환값이 문자열로 바뀌는 것은 아닙니다. 여기서는 뷰 이름을 문자열로 반환하는 경우를 설명했습니다.

@RestController: 반환값을 응답 본문으로

@RestController는 @Controller와 @ResponseBody를 결합한 어노테이션입니다. 각 메서드에 @ResponseBody를 반복해서 붙이지 않아도 반환값을 HTTP 응답 본문으로 보낼 수 있습니다.

반대로 @Controller의 메서드에 @ResponseBody를 붙여 본문을 반환할 수도 있습니다. 이 동작은 Spring의 @ResponseBody 문서에 설명되어 있습니다.

자바 객체를 JSON이나 XML로 변환해 전달하는 API에서 사용합니다. 실제 응답 형식은 등록된 메시지 변환기와 요청·응답 설정에 따라 정해집니다. 이 어노테이션을 붙인다고 무조건 JSON이 되지는 않습니다.