백엔드/스프링
@RestController vs @Controller
개발하는 민우
2022. 1. 11. 22:49
@RestController
@Controller 는 반환 값이 String 이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고 뷰가 랜더링 된다.
@RestController 는 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다.
Controller 대신에 @RestController 애노테이션을 사용하면,
해당 컨트롤러에 모두 @ResponseBody 가 적용되는 효과가 있다.
뷰 템플릿을 사용하는 것이 아니라, HTTP 메시지 바디에 직접 데이터를 입력한다.
이름 그대로 Rest API(HTTP API)를 만들 때 사용하는 컨트롤러이다.
참고로 @ResponseBody 는 클래스 레벨에 두면 전체에 메서드에 적용되는데,
@RestController 에노테이션 안에 @ResponseBody 가 적용되어 있다.
@RestController
public class MappingController {
@RequestMapping("/hello-basic")
public String helloBasic() {
log.info("helloBasic");
return "ok";
}
}
위 코드에서 @RestController가 적용되었기 때문에,
helloBasic() 메서드에서 반환 값이 String임에도 불구하고, ok 메시지를 반환하는 것이다!
@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@GetMapping("/new-form")
public String newForm() {
return "new-form";
}
위 코드는 @Controller가 적용되었기 때문에,
newForm() 메서드에서 "new-form"이라는 view를 찾는 것이다!