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