스프링부트(Spring boot)에서 400, 401, 403, 404, 500 등등 오류를 관리하기 위해서 사용되는 기능 중 편리하게 적용 할 수 있는 방법 한가지는 ErrorController를 상속받는 것 입니다.
기능을 만드는 것은 어렵지가 않는데..
구글링을 하다보면 ErrorController에서 상속을 받아 getErrorPath 메소드를 오버라이드(Overrride) 해 주어야 한다고 쓰여있습니다.
그래서 해당 내용을 참고하고 ErrorController 인터페이스를 상속받아 샘플코드를 만들어 보았습니다만..
빨강색 오류가 나타났습니다.
오류내용이...ErrorController에 상속받을 메소드가 없다고 나온 것 인데..
이게 뭔일인지 싶어서 해당 ErrorController 인터페이스를 살펴보니, getErrorPath라는 메소드가 사라져 있었습니다.
일반적으로 라이브러리의 버전이 올라가면서 사용하지 않는 메소드는 Deprecated 에노테이션을 붙였던거 같은데..
아에 사라져 버려서 적잖게 당황하였던 것 같습니다.
getErrorPath 메소드는 스프링부트 버전 2.3.X 부터 사용하지 않는 것을 권장되었다고 합니다.
그러다가 getErrorPath 메소드를 아에 제거해 버렸습니다.
* 2.5.X 라고 합니다만..정확한 버전에 대한 제보 받습니다..^-^;
메소드는 없지만 사용법은 기존과 동일 합니다.
아래 샘플코드를 살펴 보겠습니다.
import java.util.Map;
import java.util.Objects;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 오류 발생시에 대한 컨트롤러 입니다.
* **/
@Controller
public class ExceptionController implements ErrorController {
/**
* 오류를 처리합니다.
* **/
@RequestMapping(value = "/error")
public ResponseEntity<Object> handleNoHandlerFoundException(HttpServletResponse response, HttpServletRequest request) {
int status = response.getStatus();
System.out.println(status); //오류 상태
System.out.println(request.getRequestURI()); //요청 주소
//아래 코드는 샘플 응답코드입니다. 오류에 따라 원하는 방식으로 리턴하면 되겠습니다.
if (Objects.equals(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) {
Map<String, Object> body = Map.of("error", "Not Found", "timestamp", System.currentTimeMillis());
return new ResponseEntity<>(body, HttpStatus.NOT_FOUND);
}
return new ResponseEntity<>("Not Found", HttpStatus.NOT_FOUND);
}
}
response 객체를 통해서 오류의 상태값을 받을 수 있습니다.
400, 401, 404, 500 등등 원하는 오류 형태의 값을 정의하여 응답결과를 처리하면 되겠습니다.
스프링 부트로 이제 막 프로젝트를 새롭게 시작하면서 ErrorController 인터페이스를 상속받는 경우에 getErrorPath 메소드가 없다고 당황하지 말고 기존에 하던 방식대로 작업하면 되겠습니다.
이상으로 SpringBoot ErrorController에서 getErrorPath 메소드에 대한 이슈를 살펴보았습니다.
궁금한점 또는 틀린 부분은 언제든 연락주세요! 👻
'Spring framework > Spring boot' 카테고리의 다른 글
간단하게 구성하는 SpringBoot Websokcet server(스프링부트 웹소켓 서버) (3) | 2021.12.27 |
---|---|
QuartzJobBean에서 ApplicationContext을 통해 서비스(Bean) 받기 (2) | 2021.11.26 |
Spring JWT 를 활용한 로그인 (0) | 2021.11.19 |
SpringBoot change Java 8 to Java 11(스프링 부트 Java 1.8을 11로 변경) (0) | 2020.12.02 |
Springboot 터널링(스프링 부트 터널링, Spring boot ssh, 스프링 부트 ssh) (2) | 2020.11.25 |
댓글