【问题标题】:Spring 4.3.5 can i use runtime-generated java classes with @ModelAttribute annotation?Spring 4.3.5 我可以使用带有 @ModelAttribute 注释的运行时生成的 java 类吗?
【发布时间】:2017-02-22 17:40:53
【问题描述】:

我面临一个基于 Spring 4.3.5 的 MVC 应用程序

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

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

等等。

出于某些功能原因,应用程序通过 Castor 框架从 xml 描述符动态创建 java 类。这些类在开发时不存在,而仅在运行时存在。

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

有人有什么想法或建议吗?

提前多谢

【问题讨论】:

  • 你不能使用任何动态的注解——这是 javac 的限制。您可以改为挂钩到使用这些注释的底层 AOP 系统。
  • 什么意思?你能给我进一步的建议吗?

标签: java spring-4 modelattribute


【解决方案1】:

是的,可以将请求绑定到动态创建的对象,前提是它遵循 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.
    }

}

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 2012-01-09
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    相关资源
    最近更新 更多