[TroubleShooting] IllegalStateException, HttpMediaTypeNotSupportedException

JUJU·2024년 10월 3일
0

TroubleShooting

목록 보기
1/6

1. IllegalStateException

java.lang.IllegalStateException: Cannot resolve parameter names for constructor

해결방법: DTO에 @NoArgsConstructor 넣기

  • 즉, 기본 생성자를 만들어준다.
  • @ModelAttribute는 기본 생성자로 객체를 만들고 값을 set하는 방식이다.
    따라서, DTO에 기본 생성자가 존재해야 @ModelAttribute를 사용할 수 있다.

2. HttpMediaTypeNotSupportedException

@PostMapping
    public ResponseEntity<String> uploadPhoto(@RequestPart("file") MultipartFile file, @RequestBody PhotoRequest request) {
        try {
            UUID id = UUID.fromString(request.getId());
            ...
        } catch (Exception e) {
            return ResponseEntity.badRequest().body("Failed to upload file: " + e.getMessage());
        }
    }

위의 uploadPhoto 메소드를 실행했더니 다음과 같은 오류가 발생했다.

Resolved [org.springframework.web.HttpMediaTypeNotSupportedException:
Content-Type 'multipart/form-data;boundary=--------------------------440780948424522369548408;
charset=UTF-8' is not supported]

해결방법: @RequestBody@ModelAttribute로 변경하고, MultipartFilePhotoRequest 의 매개변수로 넣는다.

  • 파일 업로드와 함께 JSON 데이터를 동시에 처리하는 요청을 보낼 때 @RequestBody를 통해 데이터를 받을 수 없다.

  • @RequestBody는 HTTP 요청 본문을 하나의 JSON 객체로 처리하는 반면, 파일 업로드는 multipart/form-data 형식을 사용하기 때문이다.

  • 반면 @ModelAttribute 는 multipart/form-data를 포함하여 모든 폼 데이터를 객체에 바인딩할 수 있는 메커니즘을 제공한다.

profile
개발자 지망생

0개의 댓글

관련 채용 정보