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)만 보여주도록 함
'Java > Spring' 카테고리의 다른 글
[SpringBoot] Address already in use: JVM_Bind (0) | 2016.07.21 |
---|---|
Spring Endpoint Health 설정 (0) | 2016.07.19 |
SpringBoot 신규 프로젝트 생성하기 (0) | 2016.06.14 |
SpringBoot Profile(환경별 설정 파일 구별) (0) | 2016.06.07 |
SpringBoot JSP를 Jar에 넣기 (0) | 2016.06.01 |