Spring MVC绑定:如何绑定ArrayList <…>?


问题内容

我有一个带有ArrayList字段的DTO(bean):

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]]

为什么?请解释…


问题答案:

如果请求格式正确(things=v1&things=v2&things=v3things=v1,v2,v3),spring的内置转换器应将其正确转换为List-无需注册您自己的请求。

如果您输入的是JSON,则您需要@RequestBody而不是@ModelAttribute