백엔드
[Spring JPA] @ModelAttribute 사용 시 nullException 해결
콩지연
2023. 11. 21. 09:24
[@ModelAttribute 사용 시 nullException 해결]
1. 문제 발생
클라이언트에서 form-data형식으로 이미지(파일)과 값을 한 번에 보내는 요청이 있었다.
Controller를 아래처럼 작성하고 조회를 해보니 자꾸 요소 값이 null로 들어왔다.
- controller
@PostMapping(value = "", consumes = {"multipart/form-data"})
public DataResponse<CreateOpenAIResDto> askGPTSync(Principal principal, @ModelAttribute TalkReqDto talkReqDto) throws Exception {
return openAIService.askGPTSync(principal, talkReqDto);
}
- TalkReqDto
@Getter
public class TalkReqDto {
private Long talkId;
private String prompt;
private MultipartFile talkFile;
private String language;
}
2. 원인
파일과 객체를 한 번에 요청을 보내려면 @RequestBody가 아닌 @ModelAttribute를 사용해야 한다.
@ModelAttribute 어노테이션은 주로 폼 데이터나 URL 쿼리 파라미터와 같은 "키-값" 쌍 데이터를
객체에 바인딩하는 데 사용된다.
Spring MVC는 이 데이터를 바인딩하기 위해 setter 메서드를 사용해 값을 읽기 위해서는 해당 객체에 setter 메서드가 있어야 한다.
3. 문제 해결
TalkReqDto에 @Setter를 붙여주니 문제가 해결되었다.
@Getter
@Setter
public class TalkReqDto {
private Long talkId;
private String prompt;
private MultipartFile talkFile;
private String language;
}