一般来说,我是 Web 编程的新手,尤其是在 Java 中,所以我刚刚了解了 header 和 body 是什么。
我正在使用 Spring MVC 编写 RESTful 服务。我可以@RequestMapping
在我的控制器中创建简单的服务。我需要帮助了解如何从我的 REST 服务控制器中的方法收到的请求中获取 HTTP 标头信息。我想解析出标题并从中获取一些属性。
你能解释一下我是如何获取这些信息的吗?
一般来说,我是 Web 编程的新手,尤其是在 Java 中,所以我刚刚了解了 header 和 body 是什么。
我正在使用 Spring MVC 编写 RESTful 服务。我可以@RequestMapping
在我的控制器中创建简单的服务。我需要帮助了解如何从我的 REST 服务控制器中的方法收到的请求中获取 HTTP 标头信息。我想解析出标题并从中获取一些属性。
你能解释一下我是如何获取这些信息的吗?
当您使用 注释参数时@RequestHeader
,该参数将检索标头信息。所以你可以做这样的事情:
@RequestHeader("Accept")
获取Accept
标题。
所以从文档中:
@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive) {
}
Accept-Encoding
和标Keep-Alive
头值分别在encoding
和keepAlive
参数中提供。
而且不用担心。我们都是有东西的菜鸟。
您可以使用@RequestHeader
带有方法参数的注释HttpHeaders
来访问所有请求标头:
@RequestMapping(value = "/restURL")
public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers) {
// Use headers to get the information about all the request headers
long contentLength = headers.getContentLength();
// ...
StreamSource source = new StreamSource(new StringReader(body));
YourObject obj = (YourObject) jaxb2Mashaller.unmarshal(source);
// ...
}
我在 Header 参数中的解决方案是user="test"是:
@RequestMapping(value = "/restURL")
public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers){
System.out.println(headers.get("user"));
}
您可以使用 HttpEntity 来读取 Body 和 Headers。
@RequestMapping(value = "/restURL")
public String serveRest(HttpEntity<String> httpEntity){
MultiValueMap<String, String> headers =
httpEntity.getHeaders();
Iterator<Map.Entry<String, List<String>>> s =
headers.entrySet().iterator();
while(s.hasNext()) {
Map.Entry<String, List<String>> obj = s.next();
String key = obj.getKey();
List<String> value = obj.getValue();
}
String body = httpEntity.getBody();
}