【问题标题】:Manually doing what the ModelAttribute annotation does in Spring MVC手动执行 ModelAttribute 注释在 Spring MVC 中所做的事情
【发布时间】:2012-12-06 12:43:56
【问题描述】:

我在 Spring MVC 控制器上有一个操作方法,该控制器有一个用@ModelAttribute 注释的参数。但是,我在编译时不知道这个参数的类型是什么——我知道抽象基类型但不知道派生类型。

在运行时,我将能够决定我期待什么类,并且我将能够获得该类的新实例。但是,我不知道应该调用什么代码来以与 @ModelAttribute 相同的方式解析请求数据。

我环顾四周,似乎如果我能得到一个WebRequestDataBinder,我可以用它来填充我的对象,但为此我需要一个BinderFactory,这就是我迷路的地方.

任何人都可以在这里给我一些指示 - 或者告诉我我看错了,需要做其他事情吗?

【问题讨论】:

    标签: spring-mvc modelattribute


    【解决方案1】:

    您可以在控制器方法中注入模型本身并自己访问属性。

    @RequestMapping(...)
    public void doStuff(ModelMap model) {
        Object attr = model.get("nameOfAttribute");
        // ...
    }
    

    【讨论】:

    • 这也适用于复杂的对象,还是只适用于原始值?它如何知道使用什么类?
    • @efdee 它适用于您放入模型中的任何类型...当我考虑您的评论时,听起来您在谈论@RequestParam 而不是@ModelAttribute。使用@ModelAttribute,您通常可以控制模型内部的内容。也许我们谈论不同的目的。你能提供一些代码来澄清你在做什么吗?
    • 我认为@RequestParam 用于来自请求映射的参数,例如。对于“/users/:id”,id 将是@RequestParam。我有一个包含数据的表单,我想将其发布回我的控制器。我过去曾使用@ModelAttribute 将数据转换为实际对象。但是,这种特殊形式是动态构建的,因此我无法在编译时指定用于解析数据的具体类。但是,我可以在运行时检查一些东西,所以我最终知道它会是什么类型。
    • 似乎我对@RequestParam 的假设是错误的。我将不得不回到书本上,了解到底有什么不同。同样的问题,如何在方法中手动调用它,而不是在方法参数上使用注释?
    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2012-12-02
    • 2021-01-20
    • 2012-12-04
    • 2017-08-03
    • 2016-08-15
    相关资源
    最近更新 更多