프로필, 게시물 등을 수정할 때 이미지를 변경하지 않은 경우, 즉, 이미지가 null값인 경우 기존 이미지를 유지하고 싶었는데 계속 nullPointerException이 발생했었다. 이 문제를 해결하기 위해서 코드를 이렇게 수정했다.
String profileImage = (companyUpdateRequest.getProfileImage() == null) ?
member.getProfileImage() : s3Uploader.uploadFiles(companyUpdateRequest.getProfileImage(), "company");
이미지가 null이 들어올 경우 profileImage 문자열에 기존 이미지의 이미지 url을 저장하고, null이 아닌 경우, 이미지 파일을 버켓에 올려 저장한 후의 url을 저장하도록 했다.
이 방식으로 하게 되면 포스트맨으로는 잘 작동하는데 프런트 단에서 직접 요청을 할 경우에 자꾸 400 에러가 발생했다.
400에러는 BAD REQUEST 에러로서 잘못된 요청을 보내는 경우에 발생한다. 이 에러를 며칠동안 해결하지 못하고 있었는데 결국 백엔드 팀원분들과 모두 모여서 라이브 코딩을 하면서 결국 해결해 냈다.
백엔드 분들과 합심한 결과 포스트맨으로 요청할 때 file 형식으로 이미지를 요청하면 정상적으로 작동하는데 text 형식으로 이미지를 요청하면 똑같이 400 에러가 발생한다는 현상을 발견하게 되었다.
이 문제를 해결하기 위해 어떻게 해야할까 고민하다가 며칠전에 객체를 바인딩할 때 생성자를 사용해서 바인딩한다는 사실을 알게 되었었는데 이를 활용해보면 되겠다고 생각을 해서 닥치는대로 해보았다.
public BoardRequest(String title, String content, String dueDay, String startDate, String endDate,
String area, String detailArea, List<Tag> tags) {
this.title = title;
this.content = content;
this.boardImage = null;
this.dueDay = dueDay;
this.startDate = startDate;
this.endDate = endDate;
this.area = area;
this.detailArea = detailArea;
this.tags = tags;
}
이미지를 null로 받는 경우에 객체를 바인딩하기 위해 이미지를 null로 초기화시키는 생성자를 하나 만들었다.