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 实例在 getpost 请求之间不存在。

解决方法是这样

@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 然后将表单值应用于现有对象。