[@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;
}
'백엔드' 카테고리의 다른 글
[SpringBoot] 카카오페이 API SpringBoot에 적용하기 (2 - 결제 승인하기, 취소하기) (0) | 2023.08.20 |
---|---|
[SpringBoot] 카카오페이 API SpringBoot에 적용하기 (1 - 결제 준비하기) (0) | 2023.08.20 |
[Spring] RestTemplate이란? (0) | 2023.08.15 |
[Spring] MultiValueMap이란 무엇일까? (0) | 2023.07.26 |
[Spring JPA] 스프링 데이터 JPA 쿼리 메서드 기능 (0) | 2023.07.23 |