본문 바로가기
Spring

[Spring] @ModelAttribute와 @RequestBody의 데이터 바인딩

by Nhahan 2024. 4. 5.
@Getter
@Setter // @Setter가 빠진다면?
public class FileUploadDto {
    private String description;
    private MultipartFile file;
}

@Controller
public class FileUploadController {

    @PostMapping
    public void uploadFile(@ModelAttribute FileUploadDto fileUploadDto) {
        MultipartFile file = fileUploadDto.getFile();
        String description = fileUploadDto.getDescription();
    }
}

 

위의 @ModelAttribute를 사용했을 때 정상적으로 동작하지만, 만약 @Setter가 빠진다면 FileUploadDto 클래스의 file 필드에 null이 들어가게 되어 에러가 나게 된다.

 


 

 

그러나 @RequestDto를 사용할 경우

@Getter
public class UserDataDto {
    private String name;
}

@RestController
public class UserController {

    @PostMapping("/users")
    public String registerUser(@RequestBody UserDataDto userDataDto) {
        return "User " + userDataDto.getUsername() + " registered successfully!";
    }
}

@Setter가 없다고 하더라도 정상적으로 username과 email 필드에 정상적으로 데이터가 매핑되어 제대로 "User~"이 리턴될 것이다.

 

 

그 이유는

@ModelAttribute는 내부적으로 Setter를 통해 데이터를 바인딩하고,

@RequestBody는 ObjectMapper를 통해 데이터를 바인딩하기 때문이다.

 

 

 

 

댓글