Spring
스프링 MVC 2 - API 예외 처리 - HandlerExceptionResolver 시작
스프링 MVC 2 - API 예외 처리 - HandlerExceptionResolver 시작
2022.09.29API 예외 처리 - HandlerExceptionResolver 시작 목표 예외가 발생해서 서블릿을 넘어 WAS까지 예외가 전달되면 HTTP 상태코드가 500으로 처리된다. 발생하는 예외에 따라서 400, 404 등등 다른 상태코드로 처리하고 싶다. 오류 메시지, 형식등을 API마다 다르게 처리하고 싶다. 상태코드 변환 예를 들어서 IllegalArgumentException을 처리하지 못해서 컨트롤러 밖으로 넘어가는 일이 발생하면, HTTP 상태 코드를 400으로 처리하고 싶다. 어떻게 해야할까? ApiExceptionController - 수정 http://localhost:8080/api/members/bad 라고 호출하면 IllegalArgumentException이 발생하도록 했다. Postm..
스프링 MVC 2 - API 예외 처리 - 스프링 부트 기본 오류 처리
스프링 MVC 2 - API 예외 처리 - 스프링 부트 기본 오류 처리
2022.09.28API 예외 처리 - 스프링 부트 기본 오류 처리 API 예외 처리도 스프링 부트가 제공하는 기본 오류 방식을 사용할 수 있다. 스프링 부트가 제공하는 BasicErrorController 코드를 보자. BasicErrorController 코드 /error 동일한 경로를 처리하는 errorHtml(), error() 두 메서드를 확인할 수 있다. errorHtml() : produces = MediaType.TEXT_HTML_VALUE : 클라이언트 요청의 Accept 해더 값이 text/html인 경우에는 errorHtml()을 호출해서 view를 제공한다. error() : 그 외 경우에 호출되고 ResponseEntity로 HTTP Bdoy에 JSON 데이터를 반환한다. 스프링 부트의 예외 처리 ..
스프링 MVC 2 - API 예외 처리 - 시작
스프링 MVC 2 - API 예외 처리 - 시작
2022.09.28API 예외 처리 - 시작 목표 API 예외 처리는 어떻게 해야할까? HTML 페이지의 경우 지금까지 설명했던 것 처럼 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. 그런데 API의 경우에는 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. 지금부터 API의 경우 어떻게 예외 처리를 하면 좋은지 알아보자. API도 오류 페이지에서 설명했던 것 처럼 처음으로 돌아가서 서블릿 오류 페이지 방식을 사용해보자. WebServerCustomizer 다시 동작 WebServerCustomizer 가 다시 사용되도록 하기 위해 @Component 애노테이션에..
스프링 MVC 2 - 정리(예외 처리와 오류 페이지)
스프링 MVC 2 - 정리(예외 처리와 오류 페이지)
2022.09.28정리(예외 처리와 오류 페이지) 프로젝트 생성 서블릿 예외 처리 - 시작 Exception(예외) response.sendError(Http 상태 코드, 오류 메시지) 톰캣이 기본으로 오류 화면을 제공함. 그러나 오류 화면이 너무 별로임. 서블릿 예외 처리 - 오류 화면 제공 스프링 부트는 WebserverFactoryCustomizer를 가지고 원하는 오류페이지를 등록 할 수 잇었다. response.sendError(404) : errorPage404 호출 response.sendError(500) : errorPage500 호출 RuntimeException 또는 그 자식 타입의 예외 : errorPageEx 호출 서블릿 예외 처리 - 오류 페이지 작동 원리 예외 발생 흐름 WAS(여기까지 전파) ..
스프링 MVC 2 - 스프링 부트 - 오류 페이지2
스프링 MVC 2 - 스프링 부트 - 오류 페이지2
2022.09.28스프링 부트 - 오류 페이지2 BasicErrorController가 제공하는 기본 정보들 BasicErrorController 컨트롤러는 다음 정보를 model에 담아서 뷰에 전달한다. 뷰 템플릿은 이 값을 활용해서 출력할 수 있다. * timestamp: Fri Feb 05 00:00:00 KST 2021 * status: 400 * error: Bad Request * exception: org.springframework.validation.BindException * trace: 예외 trace * message: Validation failed for object='data'. Error count: 1 * errors: Errors(BindingResult) * path: 클라이언트 요청 경..
스프링 MVC 2 - 스프링 부트 - 오류 페이지1
스프링 MVC 2 - 스프링 부트 - 오류 페이지1
2022.09.27스프링 부트 - 오류 페이지1 지금까지 예외 처리 페이지를 만들기 위해서 다음과 같은 복잡한 과정을 거쳤다. WebServerCustomizer를 만들고 예외 종류에 따라서 ErrorPage를 추가하고 예외 처리용컨트롤러 ErrorPageController를 만듦 스프링 부트는 이런 과정을 모두 기본으로 제공한다. ErrorPage를 자동으로 등록한다. 이때 /error라는 경로로 기본 오류 페이지를 설정한다. new ErrorPage("/error"), 상태코드와 예외를 설정하지 않으면 기본 오류 페이지로 사용된다. 서블릿 밖으로 예외가 발생하거나, response.sendError(...)가 호출되면 모든 오류는 /error를 호출하게 된다. BasicErrorController라는 스프링 컨트롤러를..