일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 김영한
- 오버라이딩
- ocp
- 테스트코드
- 티스토리챌린지
- @configuration
- java
- 프록시
- 코드트리
- http 메시지 컨버터
- html form
- 코딩테스트
- 백준
- equals()
- 스프링컨테이너
- 서블릿
- 인터페이스
- 코드트리조별과제
- DI
- JSON
- 오블완
- 싱글톤
- 추상클래스
- HttpServletResponse
- 의존관계
- 참조변수
- 다형성
- fielderror
- 스프링
- objecterror
- Today
- Total
목록TIL/김영한의 스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 (25)
minOS
API 예외 처리 - @ExceptionHandlerAPI 예외처리의 어려운 점1)`HandlerExceptionResolver` 를 떠올려 보면 `ModelAndView` 를 반환해야 했다. 이것은 API 응답에는 필요하지 않다.2)API 응답을 위해서 `HttpServletResponse` 에 직접 응답 데이터를 넣어주었다. 이것은 매우 불편하다. 스프링 컨트롤러에 비유하면 마치 과거 서블릿을 사용하던 시절로 돌아간 것 같다.3)특정 컨트롤러에서만 발생하는 예외를 별도로 처리하기 어렵다. 예를 들어서 회원을 처리하는 컨트롤러에서 발생하는 `RuntimeException` 예외와 상품을 관리하는 컨트롤러에서 발생하는 동일한 `RuntimeException` 예외를 서로 다른 방식으로 처리하고 싶다면 어..
API 예외 처리 - DefaultHandlerExceptionResolverDefaultHandlerExceptionResolver` 는 스프링 내부에서 발생하는 스프링 예외를 해결한다. 대표적으로 파라미터 바인딩 시점에 타입이 맞지 않으면 내부에서 `TypeMismatchException` 이 발생하는데, 이 경우 예외가 발생했기 때문에 그냥 두면 서블릿 컨테이너까지 오류가 올라가고, 결과적으로 500 오류가 발생한다. 그런데 파라미터 바인딩은 대부분 클라이언트가 HTTP 요청 정보를 잘못 호출해서 발생하는 문제이다. HTTP 에서는이런 경우 HTTP 상태 코드 400을 사용하도록 되어 있다.`DefaultHandlerExceptionResolver` 는 이것을 500 오류가 아니라 HTTP 상태 코..
API 예외 처리 - ResponseStatusExceptionResolverResponseStatusExceptionResolver는 예외에 따라서 HTTP 상태 코드를 지정해주는 역할을 한다.다음 두 가지 경우를 처리한다.1) @ResponseStatus가 달려있는 예외2) ResponseStatusException 예외@ResponseStatus가 달려있는 예외예외에 다음과 같이 `@ResponseStatus` 애노테이션을 적용하면 HTTP 상태 코드를 변경해준다.package hello.exception.exception;import org.springframework.http.HttpStatus;import org.springframework.web.bind.annotation.ResponseS..
API 예외 처리 - HandlerExceptionResolver 활용이 코드에서 예외를 완전히 처리하기예외가 발생하면 WAS까지 예외가 던져지고, WAS에서 오류 페이지 정보를 찾아서 다시 `/error` 를 호출하는 과정은생각해보면 너무 복잡하다. `ExceptionResolver` 를 활용하면 예외가 발생했을 때 이런 복잡한 과정 없이 여기에서문제를 깔끔하게 해결할 수 있다.사용자 정의 UserException 클래스 생성package hello.exception.exception;public class UserException extends RuntimeException { public UserException() { super(); } public UserExcep..
API 예외 처리 - HandlerExceptionResolver 시작목표예외가 발생해서 서블릿을 넘어 WAS까지 예외가 전달되면 HTTP 상태코드가 500으로 처리된다. 발생하는 예외에 따라서 400, 404 등등 다른 상태코드로 처리하고 싶다. 오류 메시지, 형식등을 API마다 다르게 처리하고 싶다.- 가정`IllegalArgumentException` 을 처리하지 못해서 컨트롤러 밖으로 넘어가는 일이 발생하면 HTTP상태코드를 400으로 처리하고 싶다. 어떻게 해야할까?@Slf4j@RestControllerpublic class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@Pa..
API 예외처리 - 스프링 부트 기본 오류 처리API 예외 처리도 스프링 부트가 제공하는 기본 오류 방식을 사용할 수 있다.스프링 부트가 제공하는 `BasicErrorController` 코드를 보자.BasicErrorController 코드@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponseresponse) {}@RequestMappingpublic ResponseEntity> error(HttpServletRequest request) {} `/error` 동일한 경로를 처리하는 `errorHtml()` , `error(..