그날그날메모

Spring @ResponseStatus를 사용하여 HTTP 상태 코드 설정

Java

Spring @ResponseStatus를 사용하여 HTTP 상태 코드 설정

그날그날메모 2021. 4. 19. 02:19

1. 소개

Spring MVC에서는 HTTP 응답의 상태 코드설정하는 여러 가지 방법이 있습니다.

이 짧은 사용방법(예제)에서는 @ResponseStatus 어노테이션을 사용하는 가장 간단한 방법을 살펴 보겠습니다 .

2. 컨트롤러 방법

끝 점이 성공적으로 반환되면 Spring은 HTTP 200 (OK) 응답을 제공합니다.

컨트롤러 메서드응답 상태 를 지정하려면 해당 메서드를 @ResponseStatus로 표시 할 수 있습니다 . 원하는 응답 상태에 대해 두 개의 상호 교환 가능한 인수 인 코드값이 있습니다. 예를 들어 찻 주전자이기 때문에 서버가 커피 추출을 거부 함을 나타낼 수 있습니다 .

@ResponseStatus(HttpStatus.I_AM_A_TEAPOT)
void teaPot() {}

오류를 알리고 싶을 때 이유 인수 를 통해 오류 메시지를 제공 할 수 있습니다 .

@ResponseStatus(HttpStatus.BAD_REQUEST, reason = "Some parameters are invalid")
void onIllegalArgumentException(IllegalArgumentException exception) {}

reason 을 설정할 때 Spring은 HttpServletResponse.sendError ()를 호출합니다 . 따라서 클라이언트에 HTML 오류 페이지를 전송 하므로 REST 엔드 포인트에 적합하지 않습니다 .

또한 Spring 은 표시된 메소드가 성공적으로 완료때만 @ResponseStatus를 사용 합니다 ( Exception 을 던지지 않고 ).

3. 오류 처리기 사용

@ResponseStatus 를 사용 하여 예외 를 HTTP 응답 상태 로 변환하는 세 가지 방법이 있습니다 .

  • @ExceptionHandler 사용
  • @ControllerAdvice 사용
  • Exception 클래스 표시

처음 두 솔루션을 사용하려면 오류 처리기 메서드를 정의해야합니다. 이 기사 에서이 주제에 대해 자세히 읽을 수 있습니다 .

이전 섹션에서 일반 MVC 메서드와 동일한 방식 으로 이러한 오류 처리기 메서드와 함께 @ResponseStatus사용할 수 있습니다 .

동적 오류 응답이 필요하지 않을 때 가장 간단한 해결책은 세 번째 방법입니다. 예외 클래스를 @ResponseStatus로 표시하는 것입니다.

@ResponseStatus(code = HttpStatus.BAD_REQUEST)
class CustomException extends RuntimeException {}

Spring이이 Exception을 포착하면 @ResponseStatus 에서 제공 한 설정을 사용합니다 .

참고, 우리가 표시 할 때 예외 와 클래스 @ResponseStatus을 , Spring은 항상 호출 HttpServletResponse.sendError () , 우리 설정 여부 이유 여부.

또한 Spring은 @ResponseStatus로 표시하지 않는 한 하위 클래스에 대해 동일한 구성을 사용합니다 .

4. 결론

이 기사에서는 @ResponseStatus사용 하여 오류 처리를 포함한 다양한 시나리오에서 HTTP 응답 코드를 설정 하는 방법을 살펴 보았습니다 .

평소처럼 예제는 GitHub에서 사용할 수 있습니다 .

참고
  • https://docs.spring.io/spring-framework/docs/current/reference/html
  • https://www.baeldung.com/spring-response-status