스프링에서 @RestController와 @ModelAttribute 어노테이션을 같이 사용해서 값을 받는 방법에 대해 설명드리겠습니다.
@ModelAttribute 사용법
ModelAttribute는 데이터를 객체에 바인딩할 때 사용됩니다.
우선 ModalAttribute를 적용할 객체를 만들었습니다.
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class TestDto {
private Integer number;
private String name;
}
Lombok의 Getter와 Setter 어노테이션을 사용했습니다.
해당 객체를 컨트롤러에서 사용해보겠습니다.
@GetMapping("/test-dto")
public String getTestDto(@ModelAttribute TestDto dto) {
return dto.toString();
}
number와 name 값을 받아서 TestDto로 변환되었습니다.
참고로 @ModelAttribute가 없어도 ModelAttribute로 적용됩니다.
주의사항
ModelAttribute를 적용할 객체에 꼭 필요한 설정이 있습니다.
Setter나 생성자가 없는 경우
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.AllArgsConstructor;
@Getter
//@Setter
@ToString
//@AllArgsConstructor
public class TestDto {
private Integer number;
private String name;
}
Setter나 생성자가 없으면 값을 받을 수 없습니다.
Setter 메소드나 생성자 중에 하나라도 있어야 값을 바인딩할 수 있습니다.
Lombok 어노테이션 중에 @Data를 사용하면 Setter와 생성자 모두 적용이 되지만, @Data 어노테이션은 사용을 권장하지는 않아서 필요한 어노테이션만 따로 쓰는 것이 좋습니다.