Spring MVC Binding: Как связать ArrayList <...>? - PullRequest
0 голосов
/ 17 октября 2011

У меня есть DTO (bean) с полем ArrayList:

public MyDTO {
  ...
  private List<MyThing> things;
  ...
  ... getters, setters and so on
}

В моем initBinder у меня есть:

@InitBinder
public void initBinder(WebDataBinder binder) {
  ...
  binder.registerCustomEditor(List.class, "things", new PropertyEditorSupport() {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
       List<MyThing> things = new ArrayList<MyThings>;

       // fill things array with data from text
       ...


       // On that stage things value is correct!
       super.setValue(things);
    }
  });
}

И в моем методе запроса контроллера:

@RequestMapping({"save"})
public ModelAndView doSaveMyDTO(@ModelAttribute MyDTO myDTO) {
  // very strange myDTO comes here=(
}

Проблема в том, что, пока я нахожусь в registerCustomEditor штате, массив things в порядке.

Но когда я добираюсь до метода doSaveMyDTO - MyDTO.things выглядиткак массив из одного элемента массивов фактических значений:

Ожидается (вещи в initBinder):

[value1, value2, value3]

Получить в doSaveMyDTO (myDTO.getThings ()):

[[value1], [value2], [value3]]

Почему?Пожалуйста, объясните ...

1 Ответ

2 голосов
/ 17 октября 2011

Если запрос сформирован правильно (things=v1&things=v2&things=v3 или things=v1,v2,v3), встроенные конвертеры Spring должны правильно преобразовать его в List - нет необходимости регистрировать свой собственный.

Если ваш вводэто JSON, тогда вам нужно @RequestBody вместо @ModelAttribute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...