전체 보기
🍀

Spring의 BasicErrorController

작성일자
2024/04/20
태그
DIARY_DEVELOP
프로젝트
WoowaCourse
책 종류
1 more property
스프링에서 만일 @Controller 어노테이션이 붙은 클래스에서 예외가 발생하면 어떤 일이 발생할까?
private Reservation findReservationById(Long id) { return reservationDao.findById(id) .orElseThrow(); }
Java
복사
아래와 같이 500에러가 난다.
{ "timestamp": "2024-04-18T11:54:32.810+00:00", "status": 500, "error": "Internal Server Error", "path": "/reservations/1" }
Plain Text
복사
이는 SpringBoot의 기본 에러 처리 컨트롤러인 BasicErrorController 로 처리된 결과다. 여기서 ErrorAttribute 라는 값을 이용해 500에러와 함께 뜨는 responseBody 를 생성한다.
@RequestMapping public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { HttpStatus status = this.getStatus(request); if (status == HttpStatus.NO_CONTENT) { return new ResponseEntity(status); } else { Map<String, Object> body = this.getErrorAttributes(request, this.getErrorAttributeOptions(request, MediaType.ALL)); return new ResponseEntity(body, status); } }
Plain Text
복사
DefaultErrorAttributes를 확인하면 실제로 timestamp, status 값들을 만드는 것까지 확인할 수 있다.
private Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) { Map<String, Object> errorAttributes = new LinkedHashMap(); errorAttributes.put("timestamp", new Date()); this.addStatus(errorAttributes, webRequest); this.addErrorDetails(errorAttributes, webRequest, includeStackTrace); this.addPath(errorAttributes, webRequest); return errorAttributes; }
Plain Text
복사