API 예외 처리 - 스프링이 제공하는 ExceptionResolver1 스프링 부트가 기본으로 제공하는 ExceptionResolver 는 다음과 같다. HandlerExceptionResolverComposite 에 다음 순서로 등록 1. ExceptionHandlerExceptionResolver 2. ResponseStatusExceptionResolver 3. DefaultHandlerExceptionResolver 우선 순위가 가장 낮다. ExceptionHandlerExceptionResolver -@ExceptionHandler 을 처리한다. API 예외 처리는 대부분 이 기능으로 해결한다. 조금 뒤에 자세히 설명한다. ResponseStatusExceptionResolver -HTTP 상..
package hello.exception.resolver; import com.fasterxml.jackson.databind.ObjectMapper; import hello.exception.exception.UserException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import java.io...
고객사 마다 다른 오류를 주고 싶을 때도 있다. 사실 api의 경우 오류가 터지면 이게 400이든 500이든 무조건 500으로 발생시켜 오류를 반환해준다. 오류 상태를 바꾸고 싶다면 HandlerExceptionResolver를 이용해준다. package hello.exception.resolver; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.se..
api 요청이 실패할 경우에는 html 으로 실패값이 와서는 안된다. 일반 예외와 같이 boot는 BasicError 컨트롤러를 이용해서 api 실패 예외처리도 해준다. Request문서의 Accept가 application/json일 경우 (html이 아닐 경우 아래의 메소드로 작동한다.) 1. html 일경우 2. 그 외 @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) { HttpStatus status = getStatus(request); Map model = Collections .unmodi..
api 예외처리를 위해 간단히 api컨트롤러를 만들었다. package hello.exception.api; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController public class ApiExceptionController { @GetM..
어떠한 등록도 안한 경우 Spring boot에서는 기본적으로 /error를 호출하게 된다. 그 컨트롤러의 정체는 스프링 부트에서 제공하는 BasicErrorController이다. 스프링 부트는 이런 과정을 모두 기본으로 제공한다. ErrorPage 를 자동으로 등록한다. 이때 /error 라는 경로로 기본 오류 페이지를 설정한다. new ErrorPage("/error") , 상태코드와 예외를 설정하지 않으면 기본 오류 페이지로 사용된다. 서블릿 밖으로 예외가 발생하거나, response.sendError(...) 가 호출되면 모든 오류는 /error 를 호출하게 된다. BasicErrorController 라는 스프링 컨트롤러를 자동으로 등록한다. ErrorPage 에서 등록한 /error 를 매핑..
Interceptor에 오류페이지를 타지 않게 하는 방법은 간단하다. 다만 이 방법은 오류페이지에 대한 컨트롤러를 따로 사용 할 때에만 유용한 방법 같다 package hello.exception; import hello.exception.filter.LogFilter; import hello.exception.interceptor.LogInterceptor; import jakarta.servlet.DispatcherType; import jakarta.servlet.Filter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; impor..
spring 을 사용할 때 에러가 난다면 아래와 같은 모양으로 호출이 된다. 1. WAS(여기까지 전파) 컨트롤러(/error- page/500) -> View 여기서 필터의 경우 2번이나 호출된다. 자원적으로는 낭비이며 굳이 요청할 필요가 없다. 혹은 에러페이지일 때만 요청하는 필터를 필요로 할 수도 있을 것이다. 먼저 로그 필터를 만들어 주었다. package hello.exception.filter; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.util.UUID; @Slf4j pub..
- Total
- Today
- Yesterday
- 백엔드 개발자 역량
- 컨트
- 백엔드 개발자 공부
- BindingResult
- 항해99
- HTTP
- React
- rejectValue
- 예외처리
- 로그인
- 스프링공부
- 향해99
- 향해플러스백엔드
- ArgumentResolver
- 리터럴
- SpringBoot
- exception
- hypertexttransferprotocol
- thymleaf
- reject
- 스프링부트
- filter
- 인터셉터
- JPA
- 항해플러스
- react실행
- Java
- 향해플러스
- Intercepter
- jpa api
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |