[Spring Boot] @RestController와 @Controller의 차이점
스프링 입문 실습 후 과제를 진행하기 위해 문항을 봤다.
"기본 웹 페이지를 설정하고 @RestController를 사용하여 간단한 REST API 엔드포인트를 구현합니다.
예를 들어, “Hello, World” 메시지를 반환하는 API를 만듭니다.
엔드포인트 실행 결과 스크린샷 및 코드를 결과물로 제출합니다."
수업들었던 것 참고하려는데 수업에서는 @Controller를 사용했는데 과제는 @RestController?
무슨 차이지 하면서 찾아보게 되었다.
@RestController란?
@RestController는 Spring MVC에서 RESTful 웹 서비스를 개발하기 위한 어노테이션이다.
Spring은 반환 값을 JSON 또는 XML로 변환해 클라이언트에 전달하고,
@Controller와 @ResponseBody를 합친 형태로 동작하기에 별도의 @ResponseBody 어노테이션을 추가할 필요가 없다.
주로 RESTful API를 설계하거나 JSON 데이터를 직접 반환하는데 적합하다고 한다.
예시
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
@Controller란?
Spring MVC에서 뷰 템플릿 렌더링을 위한 어노테이션이다.
클라이언트에게 랜더링 된 HTML을 제공하고,
메서드의 반환 값을 뷰 이름으로 판단한다.
HTML 페이지를 반환하거나 포워딩할 때 적합하다.
데이터 응답을 본문에 직접 쓰고 싶다면 @ResponseBody 어노테이션을 추가해야한다.
예시
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
작성하면서 봤는데 실습할때
Controller + ResponseBody를 사용한 것도 있었다.
이게 RestController이였군..
머쓱
그래서 실습해봄
@Controller + @ResponseBody 실습
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloAPI(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
약간 나의 오해?로 생긴 블로그 글쓰기였다.
그래도 앞으론 확실하게 구분할 수 있을 듯
유익한 오해였다.