스프링/스프링 MVC 패턴
API 예외처리 - 스프링 ExceptionResolver
chanhee01
2023. 3. 5. 15:10
BadRequestException.class를 새로 생성했다.
@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "잘못된 요청 오류")
public class BadRequestException extends RuntimeException {
}
@ResponseStauts 애노테이션은 상태를 설정할 수 있게 도와주는 애노테이션이다.
code = HttpStauts.BAD_REQUEST를 통해 400 에러로 변경시켰다.
@GetMapping("/api/response-status-ex1")
public String responseStatusEx1() {
throw new BadRequestException();
}
컨트롤러에서 url을 매핑해주고 throw를 통해 BadRequestException을 넘겨주었다. 결과는 500 에러가 아니라 400에러가 나오게 되었다.
BadRequestException.calss에서 HttpStatus.NOT_FOUND로 바꾸면 404 Not Found 에러가 나오게 된다.
하지만 위의 애노테이션을 이용한 방식은 동적으로 변경하기도 어렵고 제약이 있다.
@GetMapping("/api/response-status-ex2")
public String responseStatusEx2() {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "error.bad", new IllegalArgumentException());
}
컨트롤러에 그냥 메서드 하나만 넣으면 알아서 예외처리를 해준다.
ResponseStatusException이라는 스프링에서 제공하는 기본 메서드에 (상태, 에러 메시지, 발생한 에러)를 넣으면 자동으로 해당 상태로 에러를 만들어준다.

404 에러로 잘 나온다.