Spring @ModelAttribute 接口
Spring @ModelAttribute interface
如何在下面的场景中使用 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", ..)
提供的现有实例。
正如评论中指出的那样,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";
}
这里发生的是 update
中的 Entity
绑定到从 @ModelAttribute
注释的 entity
方法创建的 Entity
。 Spring 然后将表单值应用于现有对象。
如何在下面的场景中使用 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", ..)
提供的现有实例。
正如评论中指出的那样,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";
}
这里发生的是 update
中的 Entity
绑定到从 @ModelAttribute
注释的 entity
方法创建的 Entity
。 Spring 然后将表单值应用于现有对象。