Spring Boot Application을 만들면서, 404 Page Not Found에 대한 처리를 커스텀해야할 상황이 생겼다. 스프링에서는 기본적으로 에러처리를 아래와 같은 방법으로 처리해준다. (링크 1.기본적인 에러 처리 참고)
링크 내용에서도 언급했듯이, BasicErrorController라는 곳에서 기본적인 에러를 처리해준다. 하지만, 나는 스프링부트에서 제공하는 기본적인 응답이 아닌, xml format으로 커스텀해야할 필요가 있었다. 커스텀하기위해서 사용하는 것은 이 BasicErrorController에서 AbstractErrorController를 상속받는데, AbstractErrorController에서 ErrorController라는 클래스를 구현체로 구현한다. 즉 ErrorController의 구현체인 BasicErrorController에 구현되어있다. 그렇기 때문에 ErrorController를 상속받아서 직접 커스터마이징도 가능하다. 그래서 나는 아래와같이 커스텀 에러 컨트롤러를 구현해보았다.
package com.test.ep.api.controller;
import com.test.ep.api.dto.ResponseDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@Slf4j
public class CustomErrorController implements ErrorController {
@Override
public String getErrorPath() {
return "/error";
}
// Mapping이 안된 URL - 기본 XML 응답처리
@RequestMapping("/error")
public ResponseEntity<ResponseDto> pageNotFound() {
return ResponseDto.resultFail(); // -- 어떤 정해진 응답 실패 xml
}
}
server.error.path는 default가 /error 경로이기때문에 @RequestMapping에 /error를 등록하였다. (아래에서 다시 설명)
그리고 build를 실행시..
Note: /Users/we/wemakeprice/naver-ep-real-time/src/main/java/com/test/ep/api/controller/CustomErrorController.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
라는 알림이 나왔다. 확인해보았더니..
getErrorPath() 메소드가 Deprecated되어있다. springboot 2.5.0 이상 버전부터는 아예 삭제가 된다. 이 메소드는 외부설정파일의 server.error.path에 등록하는 것으로 변경되었다. (공식문서 참고)
그럼 만약 springboot 버전이 올라갔다고 했을때, 문제가 일어나지않으면서 위의 deprecated된 메소드의 알림이 나오지 않도록 하려면 어떻게 해야할까? 많은 방법이 있었지만 나는 아래와 같은 방법을 사용해보기로했다.
바로 @SuppressWarnings 어노테이션을 사용하는 것이다!
@SuppressWarnings("deprecation") => 컴파일시, deprecated관련 안내를 하지 않는것.
그리고 한가지 더 처리해야할 작업이있는데, @Override 어노테이션을 제거해줘야 나중에 버전이 올라갔을때 오류가 발생하지 않는다. (상위버전에서는 인터페이스의 메소드가 제거되었기때문.) - 그리고 주석으로 잘 써놓는다..!
이상 CustomError처리 관련하여 알아봤습니다.
'SpringFramework > Spring' 카테고리의 다른 글
Spring - Redis 연동 (0) | 2021.10.20 |
---|---|
Spring - Validation (0) | 2021.10.20 |
Spring - Filter, InterCeptor, AOP (0) | 2021.10.13 |
Spring - Log4j2 (0) | 2021.10.13 |
Spring - Swagger (0) | 2021.10.08 |