화면에서 입력되는 값을 객체의 프로퍼티로 세팅해주는 역할을 데이터 바인딩이라고 합니다. 그리고 Spring MVC에서는 ServletRequestDataBindier와 PropertiEditor를 사용하여 폼에서 입력 된 값을 바인딩합니다.

가장 간단한 경우가 String 타입의 속성만을 가지고 있는 객체로 바인딩하는 것입니다.

먼저 String 타입을 가지고 있는 커맨드 객체를 만듭니다. 모델 객체를 커맨드 객체로 사용할 것이라면 굳이 만들 필요는 없습니다.

public class Message {

    private String title;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

}

이 때 JavaBeans 스펙에 맞게 getter와 setter가 정의되어 있어야 합니다.

다음 ServletRequestDataBinder를 사용하여 테스트를 작성 합니다.

public class MessageTest {

    private Message message;
    private ServletRequestDataBinder binder;
    private MockHttpServletRequest request;

    @Before
    public void setUp() {
        message = new Message();
        binder = new ServletRequestDataBinder(message, "message");
        request = new MockHttpServletRequest();
    }

    @Test
    public void testBinding() {
        String title = "새로운 메시지 제목";
        request.addParameter("title", title);

        binder.bind(request);

        assertEquals(title, message.getTitle());
    }
}

JUnit 테스트를 실행하여 결과를 확인할 수 있습니다.
사용자 삽입 이미지
BaseCommandController 컨트롤러의 하위 클래스들은 모두 위에서 사용한 bind 메소드를 사용하며 Binder객체를 생성할 때 사용한 Command 객체의 이름은 바인딩 할 때 에러가 발생하면 그 에러를 기록할 Errors 객체에서 사용하게 됩니다. 아무런 이름도 주지 않으면 기본값으로 taget 이라는 이름을 가집니다.

    @Test
    public void testCommandName() {
        binder = new ServletRequestDataBinder(message);
        assertEquals("target", binder.getObjectName());
    }