예외 처리하기
몇 가지 스프링의 예외들은 자동으로 명시된 HTTP 상태 코드로 매핑된다.
HTTP 상태 코드로 매핑하기 위해 예외에는 @ResponseStatus 애너테이션을 붙여줄 수 있다.
예외 처리를 위한 메서드에는 @ExceptionHandler 애너테이션을 붙여줄 수 있다.
예외를 HTTP 상태 코드에 매핑하기
스프링 예외 |
상태 코드 |
BindException |
400 - Bad Request |
ConversionNotSupportedException |
500 - Internal Server Error |
HttpMediaTypeNotAcceptableException |
406 - Not Acceptable |
HttpMediaTypeNotSupportedException |
415 - Unsupported Media Type |
HttpMessageNotReadableException |
400 - Bad Request |
HttpRequestMethodNotSupportedException |
405 - Method Not Allowed |
MethodArgumentNotValidException |
400 - Bad Request |
MissingServletRequestParameterException |
400 - Bad Request |
MissingServletRequestPartException |
400 - Bad Request |
NoSuchRequestHandlingMethodException |
404 - Not Found |
TypeMismatchException |
400 - Bad Request |
이 외에 애플리케이션 예외등에는 @ResponseStatus 어노테이션을 통해 HTTP 상태 코드와 매핑할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 | @RequestMapping(value="/{spittleId}", method=RequestMethod.GET) public String spittle ( @PathVariable("spittleId") long spittleId, Model model ) { Spittle spittle = spittleRepository.findOne(spittleId); if (spittleId == null) { throw new SpittleNotFoundException(); } model.addAttribute(spittle); return "spittle"; } | cs |
Spittle은 spittleRepository로부터 id를 이용해 받아온 객체이다.
만약, spittleRepository로부터 아무런 값을 받아오지 못하면 SpittleNotFoundException이 발생한다.
이 때, SpittleNotFoundException이 HTTP 상태 코드 404에 매핑시키려면 어떻게 해야할까?
1 2 | @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Spittle Not Found!") public class SpittleNotFoundException extends RuntimeException { } | cs |
@ResponseStatus 어노테이션을 적용해 이제부턴 SpittleNotFoundException은 "Spittle Not Found!"를 원인으로 한 404 상태 코드를 가진다.
|
이 포스트는 스프링 인 액션을 읽고 개인적으로 필요하다고 생각되는 내용을 정리한 포스트입니다. 일부 내용, 소스코드는 스프링 인 액션의 내용일 수 있습니다. |
'🌱 SPRING > 스프링 인 액션' 카테고리의 다른 글
스프링 시큐리티 ② : 상세 설정하기 (0) | 2018.09.16 |
---|---|
스프링 시큐리티 ① : 기본 설정 (0) | 2018.08.01 |
멀티 파트 폼 데이터 (0) | 2018.06.13 |
자바 설정으로 Filter 등록하기 (0) | 2018.06.13 |
DispatcherServlet 설정하기 (0) | 2018.06.13 |