Spring 개발을 하는데 분명 422 에러코드를 뱉어야하는데 400에러를 뱉는 것이다. 그래서 머임 ㅡㅡ 킹받네.. 하다가 찾아보니 다른분이 GlobalExceptionHandler라는 exceptionhandler를
@RestControllerAdvice
로 만들어놨다.
WAS는 스프링 부트가 등록한 에러 설정(/error)에 맞게 요청을 전달한다고 한다. 기본적인 에러 처리 방식은 서비스를 위한 컨트롤러 이후에 에러 컨트롤러에서 한번 더 호출하게 된다.
WAS(톰캣) -> 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 컨트롤러
-> 컨트롤러(예외발생) -> 인터셉터 -> 서블릿(디스패처 서블릿) -> 필터 -> WAS(톰캣)
-> WAS(톰캣) -> 필터 -> 서블릿(디스패처 서블릿) -> 인터셉터 -> 컨트롤러(BasicErrorController)
예외 처리기들은 스프링의 빈으로 등록되어 있고, 예외가 발생하면 순차적으로 다음의 Resolver들이 처리가능한지 판별한 후에 예외가 처리된다. 에러 흐름은 아래와 같다.
서비스를 위한 컨트롤러
@PostMapping("/test")
public TestResponse addToProduct(
@RequestBody @Validated(ValidatorGroup.Tag.class) Dto dto,
HttpServletRequest request) {
myTagService.addTest( dto);
return TestResponse.ok( ResultCode.SUCCESS_TAG ,dto);
}
exception handler
@RestControllerAdvice
public class GlobalExceptionHandler
@ExceptionHandler(RuntimeException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public CollectionResponse handleRuntimeException(RuntimeException ex, HttpServletRequest request) {
return CollectionResponse.httpError(HttpResult.BAD_REQUEST);
}
참고
https://mangkyu.tistory.com/204 (이분한테 다 배움..)