설명


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());
}

참고 사이트


+ Recent posts