bong-u/til

Spring - @RestController 정리

수정일 : 2024-11-15

@RestController

  • @Controller와 @ResponseBody를 합친 Annotation이다
  • @Controller는 ViewName을 반환해서 DispatcherServlet이 ViewResolver을 사용한다
  • @RestController는 객체를 반환해서 HttpMessageConverter가 객체를 Json으로 변환한다

@Controller와의 코드 비교

  • @Controller
1@GetMapping("")
2public @ResponseBody List<Voucher> getVouchers() {
3    return voucherRepository.list();
4}
  • @RestController
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}