我对Web编程一般都不太了解,特别是在Java方面。我刚学会了头部和正文的基本知识。
我正在使用Spring MVC编写RESTful服务。我能够在我的控制器中使用@RequestMapping
创建简单的服务。我需要帮助理解如何从请求中获取HTTP标头信息,并将其解析出来以获得一些属性。
您可以解释一下如何获取这些信息吗?
我对Web编程一般都不太了解,特别是在Java方面。我刚学会了头部和正文的基本知识。
我正在使用Spring MVC编写RESTful服务。我能够在我的控制器中使用@RequestMapping
创建简单的服务。我需要帮助理解如何从请求中获取HTTP标头信息,并将其解析出来以获得一些属性。
您可以解释一下如何获取这些信息吗?
当您使用@RequestHeader
注释参数时,该参数会检索标头信息。因此,您可以像这样执行操作:
当您使用@RequestHeader
注释参数时,该参数会检索标头信息。因此,您可以像这样执行操作:
@RequestHeader("Accept")
获取 Accept
头信息。
所以根据文档:
@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive) {
}
在encoding
和keepAlive
参数中分别提供了Accept-Encoding
和Keep-Alive
头值。
不用担心。我们都是菜鸟中的一员。
@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);
// ...
}
StringReader
读取传入的字符流。StreamSource
作为一个容器,存储转换源以及一系列的 XML 标记流。 - Debojit Saikia我的标题参数解决方案示例中的user="test"是:
@RequestMapping(value = "/restURL")
public String serveRest(@RequestBody String body, @RequestHeader HttpHeaders headers){
System.out.println(headers.get("user"));
}
您可以使用HttpEntity来读取请求体和请求头。
@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();
}
Servlet
API的细节,我可以使用注解从请求中获取所需内容。 - Vidyarequired
标志来避免这种情况,例如@RequestHeader(name = "Keep-Alive", required = false) long keepAlive
,如果未提供,则会将keepAlive设置为null。此外,注释中还有defaultValue
字段 https://docs.spring.io/spring-framework/docs/5.0.7.RELEASE/javadoc-api/org/springframework/web/bind/annotation/RequestHeader.html - Niccolò