설명
Controller 에 @InitBinder 기능을 추가로 사용 한다. WebDataBinder.class 를 인자로 받게 된다.
Sample
binder.registerCustomEditor(requiredType, field, propertyEditor);
- requireType: 파라미터 Class
- field: 파라미터 명
- propertyEditor: 파라미터 처리 핸들러
해당 코드는 Integer[] 타입의 tests=123&tests=124&tests=125 요청을 처리 하는 핸들러 이다.
필요에 따라 setAsText 함수를 Override 하여 값 수정 후 setValue(text) 처리를 하자.
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Integer[].class, "tests", new PropertyEditorSupport() {
public void setAsText(String text) throws IllegalArgumentException {
// text: field value
if (text.indexOf("&") == -1) {
setValue(Integer.valueOf(text.split("=")[1]));
return;
}
List<Integer> tests = new ArrayList<Integer>();
for (String test : text.split("&")) {
tests.add(Integer.valueOf(test.split("=")[1]));
}
setValue(tests.toArray());
}
});
}
확인 하기
@RequestMapping(value="/request", method=RequestMethod.POST)
public @ResponseBody String request(Test test) throws Exception {
return Arrays.toString(test.getTests());
}
참고 사이트