본문 바로가기

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

'Java > Spring' 카테고리의 다른 글

[SpringBoot] Address already in use: JVM_Bind  (0) 2016.07.21
Spring Endpoint Health 설정  (0) 2016.07.19
ControllerAdvice  (0) 2016.07.18
SpringBoot 신규 프로젝트 생성하기  (0) 2016.06.14
SpringBoot Profile(환경별 설정 파일 구별)  (0) 2016.06.07
SpringBoot JSP를 Jar에 넣기  (0) 2016.06.01