我想在同一个Controller中创建不同的@Entity
个实体。
@RequestMapping(value="create", method=RequestMethod.GET)
public String GET(Model model) throws InstantiationException, IllegalAccessException
{
Class<?> clazz = ????; // a Random POJO is chosen, i want to use POJOs!!
Object object = clazz.newInstance();
model.addAttribute("object", object);
return "create";
}
@RequestMapping(value="create", method=RequestMethod.POST)
public @ResponseBody Object POST(@ModelAttribute(value="object") Object object)
{
System.out.println("POST! got type: " + object.getClass().getName());
return object;
}
在Post方法中,我为@ModelAttribute(value="object") Object object
如果我将其更改为@ModelAttribute(value="object") realType object
,它的效果非常好。但我还不知道这种类型。
我认为@ModelAttribute
无论如何都可以用“对象”来实现这一点,但显然不是。我错过了什么?
答案 0 :(得分:0)
提交时没有名为object
的实际模型对象,spring根据参数类型构造它,并相应地绑定属性。
你有两个选择让它发挥作用
@ModelAttribute
带注释的方法如果这些都不存在,spring只会查看method参数并使用reflection来构造该类的实例。因此,在您的情况下,它只会是Object
,然后绑定将失败。
在会话中存储对象
@Controller
@SessionAttributes("object")
public class MyController { ... }
确保在完成后,在setComplete()
对象上调用SessionStatus
方法。
使用@ModelAttribute
带注释的方法
不是在请求处理方法中创建和添加对象,而是为它创建一个特定的方法。
@ModelAttribute("object")
public Object formBackingObject() {
Class<?> clazz = ????; // a Random POJO is chosen, i want to use POJOs!!
Object object = clazz.newInstance();
return object;
}
将在每个请求处理方法之前调用此方法,以便构造将用于绑定的新鲜对象。