And*_*ili 5 java spring annotations model spring-mvc
我在 Spring MVC 中很新。
在此期间,我正在研究可从 STS 仪表板下载的Spring MVC 展示示例。
我在理解此示例中如何处理自定义可解析 Web 参数时遇到了一些问题。
在实践中我有以下情况:
在我的 home.jsp 视图中,我有以下链接:
<a id="customArg" class="textLink" href="<c:url value="/data/custom" />">Custom</a>
Run Code Online (Sandbox Code Playgroud)
此链接生成一个指向 URL 的 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 + "'";
}
}
Run Code Online (Sandbox Code Playgroud)
处理这个 HTTP 请求的方法是 custom()
因此,当单击上一个链接时,HTTP 请求由自定义方法处理...
我在理解@RequestAttribute注释的内容时遇到问题。
我认为,在这种情况下,它将名为 foo 的请求属性绑定到一个新String foo变量。
但是……这个属性是从哪里取来的?这个变量是Spring采用的吗?
好的......我的想法是这个请求属性取自一个HttpServletRequest对象......
我认为这是因为,在这个类中,我也有beforeInvokingHandlerMethod()一个具有发音名称的方法......所以似乎这个方法设置了一个属性,在一个对象中具有name=fooand ......然后该方法可以使用这个值...value=barHttpServletRequestcustom()
事实上,我的输出是:
Got 'foo' request attribute value 'bar'
为什么beforeInvokingHandlerMethod()在custom()方法之前调用?
为什么是beforeInvokingHandlerMethod()由annoted@ModelAttribute注释?这个案子是什么意思?
您的假设是正确的@RequestAttribute,不需要将其设置为beforeInvokingHandlerMethod。假设您有一个映射到的方法,/data/init该方法将请求转发到/data/custom. 在这种情况下,请求属性也可以在 init 方法中设置。
为什么 beforeInvokingHandlerMethod() 在 custom() 方法之前调用?
为什么beforeInvokingHandlerMethod()要加@ModelAttribute注解呢?在这种情况下意味着什么?
方法上的 @ModelAttribute 指示该方法的目的是添加一个或多个模型属性。此类方法支持与 @RequestMapping 方法相同的参数类型,但不能直接映射到请求。相反,在同一控制器中,控制器中的 @ModelAttribute 方法会在 @RequestMapping 方法之前调用。
| 归档时间: |
|
| 查看次数: |
23181 次 |
| 最近记录: |