본문 바로가기

Java/Spring

ControllerAdvice


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)만 보여주도록 함