참조 : Spring MVC

객체가 속성으로 String 타입이 아닌 속성을 가지고 있을 때 데이터 바인딩을 하려면 별도의 조취가 취해져야 합니다. request에 담고 있는 데이터는 모두 문자열이기 때문에 이전 글에서 살펴보았던 간단한 DataBinding일 경우에는 정말 간단하게 바인딩을 할 수 있었습니다. 하지만 이번 경우에는 PropertyEditor의 도움을 받아서 역시 간단하게 문자열을 특정 타입으로 변환하여 바인딩 해줍니다.

다음의 표는 ServletRequestDataBinder가 기본으로 사용하는 PropertyEditor들 입니다.
사용자 삽입 이미지따라서 위 표의 Result에 있는 타입들은 별도의 PropertyEditor를 바인더에 등록하지 않더라도 알아서 문자열을 해당 타입으로 변환하여 바인딩해줍니다.

간단한 클래스 작성
[#M_ more.. | less.. | public class DefaultPropertyClass {

    private int intProperty;
    private Integer integerProperty;
    private Class classProperty;
    private URL urlProperty;
    private String[] strings = new String[10];

    public Class getClassProperty() {
        return classProperty;
    }

    public void setClassProperty(Class classProperty) {
        this.classProperty = classProperty;
    }

    public Integer getIntegerProperty() {
        return integerProperty;
    }

    public void setIntegerProperty(Integer integerProperty) {
        this.integerProperty = integerProperty;
    }

    public int getIntProperty() {
        return intProperty;
    }

    public void setIntProperty(int intProperty) {
        this.intProperty = intProperty;
    }

    public URL getUrlProperty() {
        return urlProperty;
    }

    public void setUrlProperty(URL urlProperty) {
        this.urlProperty = urlProperty;
    }

    public String[] getStrings() {
        return strings;
    }

    public void setStrings(String[] strings) {
        this.strings = strings;
    }
}_M#]
테스트 클래스 작성
[#M_ more.. | less.. | public class DefaultPropertyClassTest {

    private DefaultPropertyClass propertyClass;

    private MockHttpServletRequest request;

    private ServletRequestDataBinder binder;

    @Before
    public void setUp() {
        propertyClass = new DefaultPropertyClass();
        request = new MockHttpServletRequest();
        binder = new ServletRequestDataBinder(propertyClass);
    }

    @Test
    public void testBinding() throws MalformedURLException {

        request.addParameter("intProperty", "34");
        request.addParameter("integerProperty", "200");
        request.addParameter("classProperty", "java.lang.String");
        request.addParameter("urlProperty", "http://www.example.com/");
        request.addParameter("strings[1]", "a, b, c");
        binder.bind(request);
        assertEquals(34, propertyClass.getIntProperty());
        assertEquals(new Integer(200), propertyClass.getIntegerProperty());
        assertEquals(String.class, propertyClass.getClassProperty());
        assertEquals(new URL("http://www.example.com/"), propertyClass.getUrlProperty());
        assertEquals("a, b, c", propertyClass.getStrings()[1]);

    }
}_M#]