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

以上是 Spring MVC绑定:如何绑定ArrayList &lt;…&gt;? 的全部内容, 来源链接: utcz.com/qa/401622.html

回到顶部