我是Spring MVC的新手。
在此期间,我正在研究STS信息中心可下载的Spring MVC showcase示例。
我在理解本例中如何处理Custom Resolvable Web Arguments时遇到了一些问题。
在实践中,我有以下情况:
在我的home.jsp视图中,我有以下链接:
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
此链接会向网址生成HTTP请求:“/ data / custom”
包含处理此请求的方法的控制器类具有以下代码:
@Controller
public class CustomArgumentController {
@ModelAttribute
void beforeInvokingHandlerMethod(HttpServletRequest request) {
request.setAttribute("foo", "bar");
}
@RequestMapping(value="/data/custom", method=RequestMethod.GET)
public @ResponseBody String custom(@RequestAttribute("foo") String foo) {
return "Got 'foo' request attribute value '" + foo + "'";
}
}
处理此HTTP请求的方法是 custom()
因此,当单击上一个链接时,HTTP请求由自定义方法处理...
我在理解@RequestAttribute
注释的内容时遇到了问题。
我认为,在这种情况下,它会将名为foo的请求属性绑定到新的String foo
变量。
但是......这个属性取自哪里?这个变量是Spring采用的吗?
好的......我的想法是这个请求属性取自HttpServletRequest
对象......
我认为这是因为,在这个课程中,我也有beforeInvokingHandlerMethod()
方法,它有一个有着名的...所以看起来这个方法选择了一个属性,它有name=foo
和{ {1}},在value=bar
对象中...然后HttpServletRequest
方法可以使用此值......
实际上我的输出是:
custom()
为什么在Got 'foo' request attribute value 'bar'
方法之前调用beforeInvokingHandlerMethod()
?
为什么custom()
注释了beforeInvokingHandlerMethod()
注释?这个案子意味着什么?
答案 0 :(得分:1)
假设@RequestAttribute
,你是正确的,不需要在beforeInvokingHandlerMethod
中设置。假设您有一个映射到/data/init
的方法,该方法将请求转发给/data/custom
。在这种情况下,请求属性也可以在init方法中设置。
为什么在custom()方法之前调用beforeInvokingHandlerMethod()?
为什么beforeInvokingHandlerMethod()被@ModelAttribute注释注释?在这种情况下意味着什么?
方法上的@ModelAttribute指示该方法的目的是添加一个或多个模型属性。此类方法支持与@RequestMapping方法相同的参数类型,但不能直接映射到请求。而是在同一个控制器中的@RequestMapping方法之前调用控制器中的@ModelAttribute方法。