Java 在SpringMVC中如何将子类传递给控制器?
我的应用程序模型中有一个父类及其子类。Java 在SpringMVC中如何将子类传递给控制器?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的应用程序模型中有一个父类及其子类。 并具有以下控制器方法: @RequestMapping(method=RequestMethod.POST, value="/page") public String postMethod(Model model, Parent obj, BindingResult result) { // do something } 但我希望它能够处理通过表单发布的子类的实例。 如何执行此操作?您可以创建所需类型的对象作为隐式模型属性: @ModelAtt
并具有以下控制器方法:
@RequestMapping(method=RequestMethod.POST, value="/page")
public String postMethod(Model model, Parent obj, BindingResult result) {
// do something
}
但我希望它能够处理通过表单发布的子类的实例。如何执行此操作?您可以创建所需类型的对象作为隐式模型属性:
@ModelAttribute("parent")
public Parent createChild(@RequestParam("type") String type) {
if ("foo".equals(type)) return new Foo();
else if ("bar".equals(type)) return new Bar();
else return null;
}
因为Spring不记得自动传递给表单的对象的类型,所以您需要自己来做,方法是添加一个隐藏的表单字段,其值指定对象的类型(上例中的type
字段)
另一种选择是通过将对象存储在会话中来避免从头创建对象。可以使用
@SessionAttributes
注释对其进行配置,请参见。当我试图编写“@RequestParam(“type”)String type”时,服务器给了我404个错误(客户端发送的请求语法不正确()),但我需要一些方法来区分发送的对象。该类型参数应该在我的表单中硬编码,还是可以由spring自动传递?是的,这是我问题的解决方案!thnx!