gpt4 book ai didi

java - Spring MVC : bind request attribute to controller method parameter

转载 作者:IT老高 更新时间:2023-10-28 13:49:03 26 4
gpt4 key购买 nike

在 Spring MVC 中,很容易将请求参数绑定(bind)到处理请求的方法参数。我只是使用 @RequestParameter("name")。但是我可以对请求 attribute 做同样的事情吗?目前,当我想访问请求属性时,我必须执行以下操作:

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

但我真的很想改用这样的东西:

@RequestAttribute("attr_name") MyClass obj

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

编辑 (我想要实现的):我将当前登录的用户存储在请求属性中。因此,每当我想访问当前登录的用户(几乎在每个方法中)时,我都必须编写这个额外的行 user = (User) request.getAttribute("user");。我想让它尽可能短,最好将它作为方法参数注入(inject)。或者,如果您知道如何通过拦截器和 Controller 传递某些东西的另一种方式,我会很高兴听到它。

最佳答案

嗯,我终于明白了一点模型是如何工作的,什么是 @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
}
}

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

这完全解决了我的问题,但是我还有其他问题。有没有常见的地方可以放那些@ModelAttribute方法,所以它们对我所有的 Controller 都是通用的?我能以某种方式从preHandle() 内部添加模型属性吗?拦截器的方法?

关于java - Spring MVC : bind request attribute to controller method parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15032063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com