Spring MVC绑定:如何绑定ArrayList <…>?
我有一个带有ArrayList
字段的DTO(bean):
public MyDTO { ...
private List<MyThing> things;
...
... getters, setters and so on
}
在我的initBinder中,我有:
@InitBinderpublic 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=v3
或things=v1,v2,v3
),spring的内置转换器应将其正确转换为List
-无需注册您自己的请求。
如果您输入的是JSON,则您需要@RequestBody
而不是@ModelAttribute
以上是 Spring MVC绑定:如何绑定ArrayList <…>? 的全部内容, 来源链接: utcz.com/qa/401622.html