@ControllerAdvice @ControllerAdvice 는 대상으로 지정한 여러 컨트롤러에 @ExceptionHandler , @InitBinder 기능을 부여해주는 역할을 한다. @ControllerAdvice 에 대상을 지정하지 않으면 모든 컨트롤러에 적용된다. (글로벌 적용) @RestControllerAdvice 는 @ControllerAdvice 와 같고, @ResponseBody 가 추가되어 있다. @Controller , @RestController 의 차이와 같다. 이전 글에서는 특정 컨트롤러에서 @ExceptionHandler 어노테이션으로 예외를 처리를 했을 경우에 해당 컨트롤러의 안의 맵핑 된 주소가 있을 경우에만 예외처리가 되었다. 하지만 @ControllerAdvice 또..
@ExceptionHandler 스프링은 API 예외 처리 문제를 해결하기 위해 @ExceptionHandler 라는 애노테이션을 사용하는 매우 편리한 예외 처리 기능을 제공하는데, 이것이 바로 ExceptionHandlerExceptionResolver 이다. 스프링은 ExceptionHandlerExceptionResolver 를 기본으로 제공하고, 기본으로 제공하는 ExceptionResolver 중에 우선순위도 가장 높다. 실무에서 API 예외 처리는 대부분 이 기능을 사용한다 컨트롤러에서 오류가 터지면 먼저 디스패처에 다시 간다음 ExceptionHandler가 호출 된다. 그 중 가장 먼저 호출되는 것은 ExceptionHandlerExceptionResolver이다. /* * Copyrigh..
만약 localhost:8090/api/response-handler-ex?data=111 라는 url에서 data가 Interger 라면 localhost:8090/api/response-handler-ex?data=qqq 라고 넣으면 typeMissMatch 오류가 날 것이다. 그럼 서버에서 오류가 나기 때문에 원래는 500이 나야하지만, 사용자가 잘못 넣은 값이기 때문에 400으로 처리하는 것이 맞을 것이다. 하지만 부트는 타입미스매치를 자동으로 400으로 처리해 준다. 아래의 디폴트핸들러익셉션리졸버가 그것을 가능하게 해준다 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompil..
만약 localhost:8090/api/response-handler-ex?data=111 라는 url에서 data가 Interger 라면 localhost:8090/api/response-handler-ex?data=qqq 라고 넣으면 typeMissMatch 오류가 날 것이다. 그럼 서버에서 오류가 나기 때문에 원래는 500이 나야하지만, 사용자가 잘못 넣은 값이기 때문에 400으로 처리하는 것이 맞을 것이다. 하지만 부트는 타입미스매치를 자동으로 400으로 처리해 준다. 아래의 디폴트핸들러익셉션리졸버가 그것을 가능하게 해준다 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompil..
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 요청이 실패할 경우에는 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 를 매핑..
- Total
- Today
- Yesterday
- rejectValue
- filter
- hypertexttransferprotocol
- 백엔드 개발자 공부
- 스프링부트
- 항해플러스
- exception
- reject
- JPA
- Intercepter
- Java
- 스프링공부
- SpringBoot
- 컨트
- HTTP
- 향해플러스
- react실행
- jpa api
- 백엔드 개발자 역량
- BindingResult
- 로그인
- 예외처리
- 리터럴
- 향해99
- ArgumentResolver
- React
- thymleaf
- 항해99
- 인터셉터
- 향해플러스백엔드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |