상세 컨텐츠

본문 제목

Spring Boot에서 @ModelAttribute와 폼 데이터 바인딩 문제

트러블슈팅

by ksjsjsj 2025. 2. 25. 23:53

본문

개요

멋쟁이 사자처럼 종합 프로젝트 진행 중 반려동물 정보 수정 기능을 구현하던 중

The given id must not be null 에러가 발생

 

문제 상황

프론트엔드에서 반려동물 정보 수정 요청을 보낼 때,

클라이언트에서는 ID값이 정상정으로 표시되었지만

서버에서는 null로 받아지는 에러가 발생했다.

@PatchMapping("/pets")
public GlobalResponse<Void> modifyMyPetInfo(@LoginUser Member member,
                                          @ModelAttribute ModiPetInfoRequest modiPetInfoRequest) {
    System.out.println("==================="+ modiPetInfoRequest.getId()); // null 출력
    animalService.modifyMyPetInfo(member, modiPetInfoRequest);
    return GlobalResponse.success();
}

 

문제 원인

@ModelAttribute 어노테이션은 폼 데이터를 자바 객체에 바인딩할 때

기본 생성자를 사용해 객체를 생성한 후, setter 메서드를 통해 값을 바인딩 한다.

따라서 setter가 없으면 값이 저장되지 않기 때문에 발생한 문제였다.

 

해결 방법

@Getter
@Setter // 추가
@NoArgsConstructor
@AllArgsConstructor
public class ModiPetInfoRequest {
    private Long id;
    private String estimatedAge;
    private String feature;
    @Enumerated(EnumType.STRING)
    private AnimalSize size;
    private String registrationNo;
    private MultipartFile imageFile;
    private String healthCondition;
}

 

ModiPetInfoRequest 클래스에 setter를 추가하여 문제를 해결했다!

관련글 더보기