@RestControllerAdvision 대 @ControllerAdvision
- @RestControllerAdvise와 @ControllerAdvise의 주요 차이점은 무엇입니까?
- 휴게 서비스 및 @ControllerAdvise MVC에 대해 항상 @RestControllerAdvise를 사용해야 합니까?
@RestControllerAdvice
에 대한 통사적인 설탕일 뿐입니다.@ControllerAdvice
+@ResponseBody
여기 보시면 됩니다.
휴게 서비스 및 @ControllerAdvise MVC에 대해 항상 @RestControllerAdvise를 사용해야 합니까?
다시, 위에서 언급한 바와 같이,@ControllerAdvice
REST 웹 서비스에도 사용할 수 있지만 추가로 사용해야 합니다.@ResponseBody
.
또한 다음과 같이 이해할 수 있습니다.
@RestControler
=@Controller
+@ResponseBody
@RestControllerAdvice
=@ControllerAdvice
+@ResponseBody
.
참고로@RestControllerAdvice
RestfulApi가 포함된 예외를 처리하는 데 더 편리한 주석입니다.
운영 체제 사용 예:
@RestControllerAdvice
public class WebRestControllerAdvice {
@ExceptionHandler(CustomNotFoundException.class)
public ResponseMsg handleNotFoundException(CustomNotFoundException ex) {
ResponseMsg responseMsg = new ResponseMsg(ex.getMessage());
return responseMsg;
}
}
이 경우 CustomNotFoundException의 예외 인스턴스가 응답 본문에 느려집니다.
여기서 추출된 예: https://grokonez.com/spring-framework/spring-mvc/use-restcontrolleradvice-new-features-spring-framework-4-3
예외:좋은 REST API는 예외를 적절하게 처리하고 사용자에게 적절한 응답을 보내야 합니다.처리되지 않은 예외로 사용자를 렌더링해서는 안 됩니다.REST API 개발자에게는 오류 처리와 관련된 두 가지 요구 사항이 있습니다.
- 오류 처리를 위한 공통 위치
- API 간에 올바른 HTTP 상태 코드를 가진 유사한 오류 응답 본문
@RestControllerAdvices는 @ControllerAdvices와 @ResponseBody의 조합입니다.
@ControllerAdvices 주석은 3.2년 봄에 처음 도입되었습니다.
RESTful Services의 예외를 처리하는 데 @ControllerAdvices 주석을 사용할 수 있지만 @ResponseBody를 별도로 추가해야 합니다.
참고:
GlobalExceptionHandler는 @ControllerAdvise로 주석을 달았습니다. 따라서 응용 프로그램 전체에서 컨트롤러의 예외를 가로채게 됩니다.
@RestControllerAdvise와 @ControllerAdvise의 차이점은 다음과 같습니다.
@RestControllerAdvice
=@ControllerAdvice
+@ResponseBody
- REST 웹 서비스에서 사용할 수 있습니다.
@ControllerAdvice
MVC와 Rest 웹 서비스 모두에서 사용할 수 있습니다. Rest 웹 서비스에서 사용할 경우 Response Body를 제공해야 합니다.
예:
예외 클래스:
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends Exception{
private static final long serialVersionUID = 1L;
public ResourceNotFoundException(String message){
super(message);
}
}
Rest Web Service에서 위 예외의 사용.
@RestControllerAdvice
public class MyRestControllerAdviceHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseMsg resourceNotFoundException(ResourceNotFoundException ex) {
ResponseMsg resMsg = new ResponseMsg(ex.getMessage());
return resMsg;
}
}
MVC에서 상기 예외의 사용.
@ControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<?> resourceNotFoundException(ResourceNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
}
@ControllerAdvise를 사용하고 메서드에서 오류 개체를 반환하는 경우 오류 개체의 이름을 가진 보기를 검색하여 예상된 응답을 반환하는 대신 해당 이름을 가진 보기 페이지를 생성하지 않은 경우 404를 반환합니다.
@ControllerAdvice
public class CustomizedExceptionHandler {
@ExceptionHandler({ UserNotFoundException.class })
@ResponseStatus(code = HttpStatus.BAD_REQUEST)
public ExceptionResponce handleUserNotException(Exception ex, WebRequest request) throws Exception {
ExceptionResponce exceptionResponce = new ExceptionResponce(new Date(), ex.getMessage(),
request.getDescription(false));
return exceptionResponce;
}
}
위 코드와 같이 400(BAD_REQUEST)을 반품하고 싶은데 400이 아닌 404(NOT_FAUND)를 반품하고 있습니다.
다음 방법 중 하나를 사용하여 이 문제를 해결할 수 있습니다.
- 메서드 또는 클래스에 @ResponseBody를 추가합니다.
- @RestControllerAdvise를 사용합니다.
- 또는 ResponseEntity에서 오류 개체를 래핑할 수 있습니다.
위의 방법 중 하나를 사용하면 올바른 응답이 반환됩니다.
언급URL : https://stackoverflow.com/questions/43124391/restcontrolleradvice-vs-controlleradvice
'programing' 카테고리의 다른 글
PL/SQL: 스크립트 실행을 완전히 중지하는 지침이 있습니까? (0) | 2023.07.29 |
---|---|
n이 상수 값인데 intx[n]가 잘못된 이유는 무엇입니까? (0) | 2023.07.29 |
이 PL/SQL에 문제가 있습니까? 변수 바인딩 *이(가) 선언되지 않았습니다. (0) | 2023.07.29 |
다른 모듈의 스프링 부트 자동 배선 (0) | 2023.07.29 |
페이지 하단으로 바닥글 플러시, 트위터 부트스트랩 (0) | 2023.07.29 |