java – Spring MVC:绑定请求属性到控制器方法参数

在Spring MVC中,很容易将请求参数绑定到处理请求的方法参数中。我只是使用@RequestParameter(“name”)。但是我可以和request属性一样吗?目前,当我想访问请求属性时,我必须做以下操作:

MyClass obj = (MyClass) request.getAttribute("attr_name");

但我真的想使用这样的东西:

@RequestAttribute("attr_name") MyClass obj

不幸的是,它不会这样工作。我可以以某种方式扩展Spring功能并添加我自己的“binder”吗?

编辑(我正在尝试实现):我将当前记录的用户存储在请求属性中。所以每当我想要访问当前记录的用户(这在每个方法里面都是这样),我必须写这个额外的行user =(User)request.getAttribute(“user”);.我想使其尽可能短,最好将其作为方法参数注入。或者如果你知道如何通过拦截器和控制器传递某些东西,我会很高兴听到它。

那么,我终于明白了一些模型的工作原理,以及@ModelAttribute是什么。这是我的解决方案

@Controller 
class MyController
{
    @ModelAttribute("user")
    public User getUser(HttpServletRequest request) 
    {
        return (User) request.getAttribute("user");
    }

    @RequestMapping(value = "someurl", method = RequestMethod.GET)
    public String HandleSomeUrl(@ModelAttribute("user") User user)  
    {
        // ... do some stuff
    }
}

标有@ModelAttribute注释的getUser()方法将自动填充标记为@ModelAttribute的所有用户用户参数。所以当调用HandleSomeUrl方法时,调用看起来像MyController.HandleSomeUrl(MyController.getUser(request))。至少这是我想象的。很酷的是,用户也可以从JSP视图访问,无需任何进一步的努力。

这完全解决了我的问题,但是我还有其他问题。有没有一个共同的地方,我可以把这些@ModelAttribute方法,所以他们是所有我的控制器是常见的?我可以从拦截器的preHandle()方法里面添加模型属性吗?

翻译自:https://stackoverflow.com/questions/15032063/spring-mvc-bind-request-attribute-to-controller-method-parameter

转载注明原文:java – Spring MVC:绑定请求属性到控制器方法参数