728x90
728x90
배경
프로젝트에서 게시글 작성 시 이미지를 첨부하는 기능을 추가했다.
이미지는 MultipartFile의 형태로, 프론트로부터 받아왔다.
기존 게시글 작성 메서드에 매개변수로 MultipartFile을 추가했고, 이미지를 처리하는 코드를 추가했다.
이미지를 추가하지 않은 게시글이 존재하도록 설계했기 때문에,
이미지를 추가했을 때에만 이미지 처리 작업이 진행되어야 했다.
따라서, 이미지 추가 여부를 확인하는 예외 처리 코드를 작성했다.
그러나, 코드가 원하는 방식으로 작동하지 않았다.
문제 상황
이미지를 처리하지 않았을 때 MultipartFile 이 null 값을 반환할 것이라고 예상했다.
따라서, 예외 처리를 위해 다음과 같은 코드를 추가하였다.
if(multipartFile != null){
//이미지 처리 작업
}
그러나, 원하는대로 작동하지 않았다.
디버깅을 해보니, multipartFile은 null이 아니었다.
값을 가지는 객체로, 아래 스크린샷의 결과가 나왔다.
예외 상황을 null 값이 아닌 다른 기준으로 처리해야 했다.
해결
기본적으로 제공하는 MultipartFile 인터페이스에 들어가서 살펴봤다.
getName(), getSize()등 다양한 메서드가 존재했는데,
이미 boolean 값으로 선언된 isEmpty()를 사용하기로 했다.
MultipartFile의 content가 없거나 파일이 비어있을 경우 0을 반환한다고 한다.
null값을 비교하는 대신에 isEmpty()를 사용하여 해결했다.
기존 코드
@Transactional
public RsData<Post> create(PostRequest postRequest, Member member, MultipartFile multipartFile) {
if (member == null) {
return RsData.of("F-1", "존재하지 않는 회원입니다.");
}
Post post = new Post(postRequest, member.getId(), new ArrayList<>());
if (multipartFile != null) {
AmazonS3Dto amazonS3ImageDto = imageService.saveImageOnServer(multipartFile, post);
Image image = new Image(amazonS3ImageDto, multipartFile, post);
post.addImage(image);
}
postRepository.save(post);
return RsData.of("S-1", "질문 등록이 완료되었습니다.", post);
}
수정 후 코드
@Transactional
public RsData<Post> create(PostRequest postRequest, Member member, MultipartFile multipartFile) {
if (member == null) {
return RsData.of("F-1", "존재하지 않는 회원입니다.");
}
Post post = new Post(postRequest, member.getId(), new ArrayList<>());
if (!multipartFile.isEmpty()) {
AmazonS3Dto amazonS3ImageDto = imageService.saveImageOnServer(multipartFile, post);
Image image = new Image(amazonS3ImageDto, multipartFile, post);
post.addImage(image);
}
postRepository.save(post);
return RsData.of("S-1", "질문 등록이 완료되었습니다.", post);
}
728x90
728x90
'프로젝트 > 팀 프로젝트 - MyPill' 카테고리의 다른 글
Ncloud 크레딧 사용 후기 (0) | 2023.07.27 |
---|---|
[트러블 슈팅] - MultipartFile 테스트 케이스 (0) | 2023.07.25 |
[리팩토링] @NotNull vs @Column(nullable = false) (0) | 2023.07.22 |
[개선 작업] @Value → @ConfigurationProperties (0) | 2023.07.20 |