Java/Spring
ControllerAdvice
윤성탁
2016. 7. 18. 19:12
ControllerAdvice 어노테이션은 웹서버에서 예외가 발생했을 때
상위에서 Catch하여 처리할 수 있게해주는 기능이다.
URL 포맷에 대해 예외를 잡는다고 가정했을 때...
@ControllerAdvice public class ExceptionController { @ExceptionHandler(MalformedURLException.class) @ResponseBody public String malformedURLException(MalformedURLException e) { String message = "URL을 확인해주세요!"; logger.error("### {}", message, e); return message; }- 이런식으로 Exception을 Catch하고 안내 문구를 String으로 리턴하고 있었다..
위처럼하니 문제가 발생한다..
jQuery의 ajax 연동 시 dataType이 "json"인 경우 상관 없지만 "html", "text"인 경우 동일 타입으로 인지해서 error가 아닌 success 콜백 함수를 호출하게 된다. 이는 의도치 않은 현상으로 error는 어떻게 전달하든 error로 인식하게 할 필요가 있었다.
@ResponseStatus
@ControllerAdvice public class ExceptionController { @ExceptionHandler(MalformedURLException.class) @ResponseStatus(reason = "URL을 확인해주세요!") public void malformedURLException(MalformedURLException e) { logger.error("### URL을 확인해주세요!", e); }- 리턴 타입은 void
- 응답 상태에 대해 처리할 수 있는 어노테이션
- 상태 값도 서버에서 임의로 수정할 수 있다
- 이런식으로 전달하면 화면에서 에러로 인지하게 된다.
$.ajax({}).fail(function(error) { var oError = JSON.parse(error.responseText); alert(oError.message); });- reason(message)만 보여주도록 함