본문 바로가기

Java/Spring

[Spring] 기본 생성자가 없는 객체 바인딩시키기

참고) Bean 설정이 아닙니다.

Controller에서 매핑된 URL로 메서드가 실행되는데요~
이 경우 파라메터에 모델을 선언했다면 URL queryString에 있는 프로퍼티 값이 모델 멤버(setter)와 동일하다면 자동으로 Binding됩니다.
public class Foo {
	private int id;

	public void setId(int id) {
		this.id = id;
	}
	
	public int getid() {
		return this.id;
	}
}

@Controller
public class FooController {
	@RequestMapping("/foo")
	public String getFooView(Foo fooModel) {
		return "foo";
	}
}
- 인자가 없는 기본 생성자는 자동으로 데이터가 매칭됩니다.
- @ModelAttribute를 생략해도 됩니다.

기본 생성자가 없는 모델객체는?

위 코드로 그대로 진행하면 에러가 발생합니다.
No default constructor found; nested exception is java.lang.NoSuchMethodException: 모델 클래스 이름()
수정된 코드
public class Foo {
	private int id;

	public Foo(int id) {
		this.id = id;
	}
	
	public int getid() {
		return this.id;
	}
}

@Controller
public class FooController {
	@ModelAttribute("foo")
	public Foo getFoo() {
		return new Foo(10);
	}
	
	@RequestMapping("/foo")
	public String getFooView(@ModelAttribute("foo") Foo fooModel) {
		return "foo";
	}
}
- 직접 Controller에 ModelAttribute 설정을 하면 기본 생성자가 없이 직접 생성하여 대응할 수 있습니다.