Annotated Controllers
스프링 MVC에서 컨트롤러임을 나타내는 어노테이션으로는 @Controller 와 @RestContoller가 있다.
@RestController는 @Controller와 @ResponseBody를 합친 것이다.
@ResponseBody가 하는 일이 뭘까?
@ResponseBody 어노테이션은 HTTP Response Body에 데이터를 넣어주는 일을 한다.
따라서 이 어노테이션이 달린 메서드는 HTTP Response Body에 데이터를 넣어 반환한다.
@Controller 와 @RestController
@Controller와 @RestController의 주요한 차이점은 메서드가 무엇을 반환할 수 있는가?이다.
@RestController는 메서드가 객체를 반환하는데, 자동으로 @ResponseBody가 HTTP Response Body에 넣어 반환한다. 이 때 HttpMessageConverter가 객체를 HTTP Response Body에 들어갈 수 있는 형태로 바꿔준다.
@Controller는 메서드는 일반적으로 View의 이름을 반환하는데, ViewResolver가 View의 이름으로 View를 찾는다. 그리고 View가 렌더링되어서 Http Response Body에 포함되게 된다.
@Controller
@RequestMapping("/return-value")
public class ReturnValueController {
@GetMapping("/thymeleaf")
public String thymeleaf() {
return "sample";
}
}
여기서 sample이라는 View 이름이 sample.html이라는 View로 매핑된다.
물론 다음처럼 @Controller에서도 직접 Http Response Body 에 들어가는 데이터를 직접 넣어줄 수도 있다.
이 때는 View 이름을 반환하는게 아니므로 ViewResolver가 사용되지 않는다.
@Controller
@RequestMapping("/return-value")
public class ReturnValueController {
@GetMapping("/users")
@ResponseBody
public User responseBodyForUser() {
return new User("name", "email");
}
@GetMapping("/users/{id}")
public ResponseEntity<User> responseEntity(@PathVariable Long id) {
return ResponseEntity.ok(new User("name", "email"));
}
}
나의 결론
View를 반환할 때는 @Controller를 쓰고, 데이터를 반환할 때는 @RestController를 쓰면 될 것 같다!
'프로그래밍 > JAVA Spring' 카테고리의 다른 글
[Spring 스프링] POJO란? (0) | 2023.04.23 |
---|---|
[Spring 스프링] Spring MVC - ControllerAdvice(@ControllerAdvice와 @ExceptionHandler를 이용한 예외처리) (0) | 2023.04.20 |
[Spring 스프링] JdbcTemplate 써보기 (0) | 2023.04.15 |
[Spring 스프링] JDBC, JDBC 드라이버, JDBCTemplate (0) | 2023.04.14 |
[Spring 스프링] @Component, @Repository, @Service, @Controller 는 뭐가 다를까 (2) | 2023.04.12 |