如何将界面设置为ModelAttribute
,如下所示?
@GetMapping("/{id}")
public String get(@PathVariable String id, ModelMap map) {
map.put("entity", service.getById(id));
return "view";
}
@PostMapping("/{id}")
public String update(@ModelAttribute("entity") Entity entity) {
service.store(entity);
return "view";
}
以上代码段提供了以下错误
BeanInstantiationException: Failed to instantiate [foo.Entity]: Specified class is an interface
我不希望spring为我实例entity
,我想使用map.put("entity", ..)
提供的现有实例。
答案 0 :(得分:4)
正如评论中指出的那样,Entity
实例在get
和post
请求之间无法生存。
解决方案就是这个
@ModelAttribute("entity")
public Entity entity(@PathVariable String id) {
return service.getById(id);
}
@GetMapping("/{id}")
public String get() {
return "view";
}
@PostMapping("/{id})
public String update(@ModelAttribute("entity") Entity entity) {
service.store(entity);
return "view";
}
此处发生的是Entity
中的update
与Entity
带注释的@ModelAttribute
方法创建的entity
绑定。然后,Spring将表单值应用于现有对象。