2017-02-22 61 views
0

我正面临基于Spring 4.3.5的MVC应用程序Spring 4.3.5我可以使用带有@ModelAttribute注解的运行时生成的java类吗?

当用户提交表单并且调用正确的控制器方法调用时,@ModelAttribute注释从模型中拉出绑定的对象。 鉴于@ModelAttribute注解的语法,该对象类型被指定到方法参数定义,如例如

@ModelAttribute("command") Mail mail 
@ModelAttribute("command") News news 

对于某些功能上的原因,该应用程序在运行中创建java类从xml描述符通过Castor框架。这些类在开发时不存在,但仅在运行时存在。

我找不到用@ModelAttribute注解来使用这些运行时生成类的方法!目前,我应该为每一个对象开发新的控制器方法。

有没有人有任何想法或建议?

THX很多提前

+0

您不能对任何动态使用注释 - 这是一个javac限制。您可以改为使用这些注释的基础AOP系统。 – OrangeDog

+0

你是什么意思?你能给我进一步的建议吗? – vale

回答

0

是的,这是可能的结合动态创建的对象的请求,只要它粘附于POJO结构。 this blog post中有一个示例(编号为2),它处理完全相同的情况。

绑定对象的参数类型不需要是静态的。它可以和java.lang.Object一样通用。

例如

@Controller 
public class CommandController { 

    @ModelAttribute("command") 
    public Object getInitializeObject(HttpServletRequest request) { 
     //use your own logic to instantiate the object. 
     if(request.getParameter("requesttype").equals("mail")) { 
      return new Mail(); 
     } 
     else { 
      return new News(); 
     } 
    } 

    @RequestMapping(value="/myrequest.do", method=RequestMethod.GET) 
    public ModelAndView handleRequest(@ModelAttribute("command") Object command) { 
     //request handling logic here. 
    } 

} 
相关问题