728x90
org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present
@RequestParam을 사용하면서 발생했던 에러이다.
지금 개발중인 서비스의 요구사항 중 하나로 습관 챌린지에 참여한 후 매일 참여한 습관을 수행했다는 인증 게시물을 올려야 하는데, 원래는 필수로 이미지를 업로드할 수 있어야 했다. 하지만 개발 중간에 이미지를 업로드할 수도 있고 하지 않을 수도 있도록 요구사항이 변경되었다.
해당 에러는 이미지를 업로드하지 않고 인증 게시물을 게시했을 때 발생했다.
원인
원인은 아주아주 간단하다. @RequestParam을 별도로 설정하지 않으면 required의 default 값은 trure이기 때문에 file을 업로드하지 않았을 때 MissingServletRequestPartException가 발생했던 것이다.
@PostMapping("/{chaellenge-id}/auths")
public ResponseEntity createAuth(@PathVariable("chaellenge-id") @Positive Long challengeId,
@RequestPart("file") MultipartFile multipartFile, // 여기가 문제!
@RequestPart("data") @Valid AuthDto.Post postDto) {
...
return new ResponseEntity<>(authMapper.toDto(createAuth), HttpStatus.CREATED);
}
해결
해결 방법도 아주 간단하다. @RequestParam을 required = false 로 설정해주면 된다.
이제 쿼리스트링에 file이 존재하지 않아도 예외가 발생하지 않는다.
@PostMapping("/{chaellenge-id}/auths")
public ResponseEntity createAuth(@PathVariable("chaellenge-id") @Positive Long challengeId,
@RequestPart(value = "file", required = false) MultipartFile multipartFile, // required = false 추가
@RequestPart("data") @Valid AuthDto.Post postDto) {
...
return new ResponseEntity<>(authMapper.toDto(createAuth), HttpStatus.CREATED);
}
요구사항에 따라 코드에 바로 반영을 했어야 했는데, 사소한 부분이라 놓쳤던 것이 아쉽다. 다음에는 조금 더 꼼꼼히 살펴봐야겠다.
728x90