Non-String DataBinding 테스트하기
참조 : 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#]