Spring Rest服务中的可选请求头

20

我正在使用Spring Restful Web服务,并且请求体带有如下所示的请求头:

@RequestMapping(value = "/mykey", method = RequestMethod.POST, consumes="applicaton/json")
public ResponseEntity<String> getData(@RequestBody String body, @RequestHeader("Auth") String authorization)  {
try {
    ....
} catch (Exception e) {
    ....
}
}

我想传递一个名为 "X-MyHeader" 的可选请求头。在Spring REST服务中,我应该如何指定这个可选请求头?

同时,我该如何在响应头中传递相同的值呢?谢谢!

更新:我刚发现我可以在请求头中设置 required=false,所以一个问题已经解决了。现在,唯一剩下的问题是如何在响应中设置头?


值得注意的是,@RequestHeader 只适用于请求中的原始标头,而不适用于通过拦截器或过滤器添加的标头。 - Tiina
2个回答

28

在你的@RequestHeader中使用required=false

@PostMapping("/mykey")
public ResponseEntity<String> getData(
  @RequestBody String body, 
  @RequestHeader(value = "Auth", required = false) String authorization)  {}

4
这个问题在这里得到了回答:In Spring MVC, how can I set the mime type header when using @ResponseBody 以下是代码示例来源:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-ann-httpentity
@RequestMapping("/something")
public ResponseEntity<String> handle(HttpEntity<byte[]> requestEntity) throws UnsupportedEncodingException {
  String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader");
  byte[] requestBody = requestEntity.getBody();
  // do something with request header and body

  HttpHeaders responseHeaders = new HttpHeaders();
  responseHeaders.set("MyResponseHeader", "MyValue");
  return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接