2022년 08월 28일(일)
FIKA 기능 개발 및 오류 수정
API 추가 개발
Image upload API 사용시, 파일 최대 크기를 10MB로 설정하였다. 이를 초과하는 요청에 대해선 FileSizeLimitExceededException
이 발생하였고, 500 Interanl Server Error를 응답함.
catch 문으로 처리하고자 controller layer에 있는 upload API에
catch(FileSizeLimitExceededException e) {
e.~~
}
이렇게 걸어두었는데도 예외가 계속 발생했다.
결론적으론, ExceptonHandler를 통해 해결할 수 있다.
@ExceptionHandler(FileSizeLimitExceededException.class)
@ResponseStatus(HttpStatus.PAYLOAD_TOO_LARGE)
public ResponseEntity<ApiResponse> fileSizeLimitExceeded() {
log.warn("[IMAGE UPLOAD FAIL] : Upload size exceeded max size");
return new ApiResponse<>(OVER_FILE_UPLOAD_LIMIT).toResponseEntity();
}
415 error
우선 HttpStatus 415은 Unsupported Media Type
이다. FIKA프로젝트 중 POST요청 시, 계속 415응답을 받는데 헤메고 있었다.
결론적으론, Post요청의 Body 값을 @RequestBody
로 받는 경우
요청의 Content-type : application/json
이 되어야 한다.
항상 Content-type : application/json
타입으로 받는 다면 유연하지 못하다. 그래서 @RequestBody
대신, @ModelAttribute
를 사용하여(혹은 안 적어도 됨) key=value 쌍으로 이루어진 Content-type : application/x-www-form-unlencoded
에 대한 요청도 처리할 수 있어야 한다.
ExceptionHandler와 (Rest)ControllerAdvice를 통해 예외 처리를 일괄적으로 할 수도 있다. => 유지보수에 유리(?)
FileSizeLimitExceededException가 catch로 잡히지 않는 이유는 내장 톰캣에서 던지는 예외이기 때문이다. SizeLimitExceededException라는 예외도 던지는데, Spring이 MutiPart 예외를 MaxUploadSizeExceededException로 통합해서 관리
추후 내장 서버가 톰캣이 아니어도, MaxUploadSizeExceededException로 예외를 처리하면 내장 서버가 변경되어도 코드에 손댈일이 적을 듯..?!
내장 톰캣 서버의 maxSwallowSize라는 게 있음
415 Error는 처음 알았다..!