2021-10-26
기존에 @Controller라는 어노테이션은 이미 MVC 구조의 프로젝트를 다루면서 많이 익숙해졌을 것이라고 생각한다.
@Controller 경우 자신에게 맵핑된 view를 찾아가는 것이 주요 목표이다. 하지만 view이외의 JSON과 같은 데이터 형식을 전달하기 위해서 @ResponseBody와 같은 어노테이션과 같이 사용되는 경우도 많은데, 이러한 두 가지 기능을 하나의 어노테이션으로 사용하고 조금 더 RestFul API 적합한 개발을 위해 나온 어노테이션이 바로 @Restcontroller이다. 사용방법은 간단하며, 아래의 스프링 문서에서 제공하는 예제 코드를 보자.
- 예제1
@RestController
public class MyController {
@RequestMapping("/thing")
public MyThing thing() {
return new MyThing();
}
}
기존의 @Controller에 자리에 @RestController 어노테이션은 넣어주면 되며, 이제 해당 컨트롤러의 메서드들은 모두 @ResponseBody가 붙은 것과 같은 효과를 가지게 된다. 때문에 각 메소드위에 매핑할 주소만 입력해주면 된다.
또한 @RestController에서의 메서드의 리턴 값은 JSON 형식으로 직렬화가 가능할 경우에는 기본적으로 JSON 형식으로 표현되며, 브라우저에 따라 XML로 표현되기도 한다.
물론 모두 데이터 형식으로 리턴하는 메서드가 있는 컨트롤러의 경우에는 위와 같은 @RestContrller 어노테이션의 유용하겠지만, 데이터와 View 두 가지 형식 모두 구현되어 있는 컨트롤러의 경우 아래와 같은 예제가 조금 더 유용할 수 있다.
- 예제 2
@Controller
public class MyController {
@RequestMapping("/thing")
@ResponseBody
public MyThing thing() {
return new MyThing();
}
}
예제 1과 예제 2는 동일한 기능을 수행하며, 자신의 프로젝트의 컨트롤러에 맞는 어노테이션을 선택해 구현하면 된다.
메인 이미지 출처 : Photo by Mark Basarab on Unsplash