스프링 부트를 사용하여 API를 작성하고 있습니다. 요청 헤더에서 토큰을 가져 와서 인증하는 인증 필터를 설정했습니다. 토큰을 사용하여 사용자를 찾을 수 없으면 InvalidWSUserException이 발생합니다.스프링 부트 @ExceptionHandler가 관련 예외를 catch하지 않습니다.
InvalidWSUserException을 잡아 내고 요청중인 클라이언트가 요청한 토큰이 유효하지 않다는 것을 요청하는 JSON 문자열로 응답 할 수 있도록 여러 개의 @ExceptionHandler를 보유 할 클래스를 만들었습니다.
다른 프로젝트에서이 작업을 수행했지만이 새 프로젝트에서 작동하지 못하는 것 같습니다.
처리기가 응답을 처리해야하므로 InvalidWSUserException은 비어 있습니다.
public class InvalidWSUserException extends RuntimeException {
}
나는 핸들러 클래스를 이와 같이 정의했습니다.
@ControllerAdvice
public class ExceptionController {
@ExceptionHandler(value=InvalidWSUserException.class)
public ResponseEntity invalidWSUserException(InvalidWSUserException exception) {
return new WSResponse().send(HttpStatus.UNAUTHORIZED, "Invalid token.");
}
}
나는 예외를 던지고 클래스가 콩을 통해 봄에 의해 초기화되지 않은 이전 프로젝트에 문제가 있었다, 그러나 나는이 수업을 통해 확인했습니다, 그리고 클래스가 제기되는 예외는 @Autowired 주석에 의해 인스턴스화됩니다.
왜 @ExceptionHandler가 내가 생각하는대로하지 않는지 이해하는 데 어려움을 겪고 있습니다.
확인하려면 브라우저에서 볼 수있는 출력은 오류 500 json 응답입니다. 그것은 @ExceptionHandler
{
"timestamp": 1470833849289,
"status": 500,
"error": "Internal Server Error",
"exception": "digital.sheppard.exceptions.InvalidWSUserException",
"message": "No message available",
"path": "/api/product"
}