在此期间,我正在研究可从 STS 仪表板下载的 Spring MVC Showcase 示例
我对通过 header 映射 HTTP 请求的功能有疑问。
在展示示例中,我有以下 2 个链接:
<li>
<a id="byHeader" href="<c:url value="/mapping/header" />">By presence of header</a>
</li>
<li>
<a id="byHeaderNegation" class="textLink" href="<c:url value="/mapping/header" />">By absence of header</a>
</li>
因此,如您所见,单击第一个链接我正在创建一个指向“/mapping/header”文件夹的 HTTP 请求,单击第二个链接我正在创建一个指向相同“/mapping/header”的 HTTP 请求"文件夹
现在这些 HTTP 请求由我的 Controller 类中的两个方法管理。
第一个通过以下方法处理:
@RequestMapping(value="/mapping/header", method=RequestMethod.GET, headers="FooHeader=foo")
public @ResponseBody String byHeader() {
System.out.println("Sono dentro byHeder()");
return "Mapped by path + method + presence of header! (MappingController)";
}
而第二个是通过以下方法处理的:
@RequestMapping(value="/mapping/header", method=RequestMethod.GET, headers="!FooHeader")
public @ResponseBody String byHeaderNegation() {
System.out.println("Sono dentro byHeaderNegation");
return "Mapped by path + method + absence of header! (MappingController)";
}
我不明白为什么这两个请求是由两种不同的方法处理的,因为两个链接都会生成一个指向同一个文件夹的 HTTP 请求:“/mapping/header”
为什么第一个有header,第二个没有?
我可能遗漏了什么,你能帮我理解这件事吗?
非常感谢 安德里亚
最佳答案
您可以在 src/main/webapp/WEB-INF/views/home.jsp
中找到文件末尾,按标题显示映射的链接正在使用设置 FooHeader
的 Ajax至 foo
.
这就是这两个方法的调用方式。
如果你没有设置标题(意味着一个简单的 HTML 链接),方法 byHeaderNegation
被调用,但是如果您设置 Header(在本例中使用 Ajax),那么方法 byHeader
被调用是因为 FooHeader=foo
是true
$("#byHeader").click(function(){
var link = $(this);
$.ajax({ url: this.href, dataType: "text", beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); }, success: function(form) { MvcUtil.showSuccessResponse(form, link); }, error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, link); }});
return false;
});
关于java - Spring,如何通过 header 管理HTTP请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452228/