본문 바로가기
반응형

API예외처리5

[Spring Boot] : ExceptionResolver사용하기(2) DefaultHandlerException에 대해 공부했다. DefaultHandlerException는 스프링 내부에서 발생하는 예외를 해결하는데 파라미터 바인딩 시점에 타입이 맞지 않아 생기는 500오류를 HTTP 상태 코드 400오류로 바꿔준다. @GetMapping("/api/default-handler-ex") public String defaultException(@RequestParam Integer data) { return "ok"; } DefaultHandlerExceptionResolver.handleTypeMismatch를 보면 response.sendError()를 통해 문제를 해결한다. sendError(400)을 호출했기 때문에 WAS에서다시 오류 페이지를 내부 요청하게 된다... 2022. 3. 7.
[Spring Boot] : HandlerExceptionResolver 활용하기 HandlerExceptionResolver 활용하기 예외 발생 → WAS → 오류 페이지 찾는다 → 다시 /error 호출 이 과정은 복잡하다. ExceptionResolver를 통해 예외가 발생했을 때 깔끔하게 해결이 가능하다. if (id.equals("user-ex")) { throw new UserException("사용자 오류"); } ApiExceptionController에 user-ex에 대한 코드를 넣어주어 호출 시 UserException이 발생하도록 했다. try { if (ex instanceof UserException) { log.info("UserException resolver to 400"); String acceptHeader = request.getHeader("acc.. 2022. 3. 5.
[Spring Boot] : HandlerExceptionResolver 시작하기 HandlerExceptionResolver 시작하기 IllegalArgumentException을 처리하지 못 해 컨트롤러 밖으로 넘어가는 일이 생길 때 HTTP 상태 코드를 400으로 처리하고 싶다고 가정하고 실습을 진행했다. if (id.equals("bad")) { throw new IllegalArgumentException("잘못된 입력 값"); } 먼저 ApiExceptionController를 수정해 주었다. HandlerExceptionResolver를 사용하면 컨트롤러 밖으로 던져진 예외를 해결하고 동작 방식을 변경할 수 있따. 줄여서 ExceptionResolver라고 부른다. @Slf4j public class MyHandlerExceptionResolver implements Ha.. 2022. 3. 4.
[Spring Boot] : API 예외 처리 스프링 부트 기본 오류 처리 API 예외 처리도 스프링 부트가 제공하는 기본 오류 방식을 사용할 수 있다. @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) { } @RequestMapping public ResponseEntity error(HttpServletRequest request) { } /error 동일 경로를 처리하는 메서드 두 개를 코딩해 주었다. errorHTML은 produces를 사용해 값을 주어 클라이언트 요청의 Accept 해더 값이 text/html인 경우 errorHtml()을 호출해 view를 제공하고.. 2022. 3. 3.
[Spring Boot] : API 예외 처리 기본 체크하기 API 예외 처리 기본 체크 API 예외 처리에 대해 공부했는데 API 경우 일반적인 오류 페이지 말고도 생각할 게 많다. API는 오류 상황에 맞는 응답 스펙과 JSON으로 데이터를 내보내야 한다. 먼저 WAS에 예외가 전달되거나 response.sendError()가 호출되면 등록된 예외 페이지 경로를 호출하는 WebSErverCustomizer에 Component 주석을 풀어줬다. private String memberId; private String name; 간단하게 DTO를 만들고 @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable("id") String id) { if (id.equals("ex")) { thro.. 2022. 3. 2.
반응형