Language/Java

org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present 에러

이웃비 2021. 6. 10. 03:02

aws ec2 서버에 업로드하고 포스트맨을 통해 저장하는 테스트를 하는데

file을 업로드할 부분에 업로드하지않고 보내봤더니 에러가 발생했다

 

postman test : 

에러로그 :

 com.timeline.jwt.TokenProvider: - UserDetails- 아이디 : 1
2021-06-10 00:49:13.530  WARN 18107 --- [nio-8080-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.multipart.support.Missi
ngServletRequestPartException: Required request part 'file' is not present]

 

컨트롤러 : 

 

@PostMapping(path = "/master/save",consumes = {"multipart/form-data"})
    public ResponseEntity<TimelineMasterListResponseDto> saveMaster(@RequestPart(value="dto") List<TimelineMasterSaveRequestDto> timelineMasterSaveRequestDto, @RequestPart(value="file") MultipartFile file) throws IOException {
     

        String imgPath = s3Service.upload(timelineMasterSaveRequestDto.get(0).getFilePath(), file);
        timelineMasterSaveRequestDto.get(0).setFilePath(imgPath);

        return ResponseEntity.ok(timelineService.saveMaster(timelineMasterSaveRequestDto.get(0)));
    }

 

해결 : 

찾아보니 required=false 해주면 해당 필드가 쿼리스트링에 존재하지 않아도 예외가 발생하지 않는다고 한다

@RequestPart(value="file",required = false

파일부분에 추가해주니 잘 되었다.

 

 

참고 : 

https://velog.io/@hellozin/RequestParamrequired-false-%EC%A3%BC%EC%9D%98%ED%95%A0-%EC%A0%90

 

@RequestParam(required = false) 주의할 점

@RequestParam을 사용하며 겪은 실수를 공유해 보았습니다. @RequestParam 먼저 간단하게 @RequestParam에 대해 알아보자면 Spring MVC에서 쿼리 스트링 정보를 쉽게 가져오는데 사용할 수 있습니다. 예를 들어

velog.io