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 응답 코드를 설정 하는 방법을 살펴 보았습니다 .
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/spring-response-status
'Java' 카테고리의 다른 글
Spring @RequestMapping 새로운 바로 가기 어노테이션 (0) | 2021.04.19 |
---|---|
Spring MVC 사용자 지정 유효성 검사 (0) | 2021.04.19 |
Spring MVC와 @ModelAttribute 어노테이션 (0) | 2021.04.19 |
Spring MVC의 HttpMediaTypeNotAcceptableException (0) | 2021.04.18 |
@Before 대 @BeforeClass 대 @BeforeEach 대 @BeforeAll (0) | 2021.04.18 |