@RestController
- @Controller와 @ResponseBody를 합친 Annotation이다
- @Controller는 ViewName을 반환해서 DispatcherServlet이 ViewResolver을 사용한다
- @RestController는 객체를 반환해서 HttpMessageConverter가 객체를 Json으로 변환한다
@Controller와의 코드 비교
1@GetMapping("")
2public @ResponseBody List<Voucher> getVouchers() {
3 return voucherRepository.list();
4}
1@GetMapping("")
2public List<Voucher> getVouchers() {
3 return voucherRepository.list();
4}
@RestControllerAdvice
- @ControllerAdvice와 같이 @Controller에서 발생한 예외를 전역적으로 처리하는 Annotation이다
- @ControllerAdvice와 @RestControllerAdvice의 차이는 @Controller와 @RestController의 차이와 같다
예제 - @RestControllerAdvice 구현
- 필자는 Controller에서 발생한 IllegalArgumentException을 400 Bad Request로 처리하였다
1@RestControllerAdvice
2public class ControllerExceptionHandler {
3
4 @ExceptionHandler(IllegalArgumentException.class)
5 public ResponseEntity<Object> handleIllegalArgumentException(IllegalArgumentException e) {
6 return ResponseEntity.status(HttpStatus.BAD_REQUEST.value()).body(e.getMessage());
7 }
8}