스프링에서 만일 @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
복사
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
복사