스프링/스프링 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 에러로 잘 나온다.