Spring @ModelAttribute接口

时间:2016-10-14 12:12:54

标签: java spring spring-mvc model-view-controller spring-web

如何将界面设置为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", ..)提供的现有实例。

1 个答案:

答案 0 :(得分:4)

正如评论中指出的那样,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";
}

此处发生的是Entity中的updateEntity带注释的@ModelAttribute方法创建的entity绑定。然后,Spring将表单值应用于现有对象。