gpt4 book ai didi

spring - SpringBoot 2.1中判断传入RequestEntity的HTTP版本

转载 作者:可可西里 更新时间:2023-11-01 17:17:11 29 4
gpt4 key购买 nike

我正在尝试从 Spring 中传入的 http 请求中获取 HTTP 版本(特别是 Spring Boot 2.1.4)。表示 HTTP 1.1 部分在 RFC2616 的“请求行”中定义为“HTTP 版本”:https://www.rfc-editor.org/rfc/rfc2616#section-5.1 .Spring 的 RequestEntity 似乎具有各种功能来获取 url、路径、 header 等,但不是这个。官方文档也没有帮助。

考虑以下代码:

@RestController
@RequestMapping("/")
public class MyController
{
@GetMapping("/")
@ResponseBody
public ResponseEntity<String> getSomething(RequestEntity requestEntity)
{
// access HTTP Version number of incoming RequestEntity ***HERE***

打印传入请求的 header 时,例如

Map<String, String> headers = requestEntity.getHeaders().toSingleValueMap();
Object[] keys = headers.keySet().toArray();

for(int i=0; i< headers.size(); i++) {
System.out.println(keys[i].toString() + ": " + headers.get(keys[i].toString()));
}

(请原谅我肮脏的日志记录代码),我得到了 ACTUAL header ,例如

host: localhost:8888
connection: keep-alive
cache-control: max-age=0
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36
dnt: 1
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,de;q=0.8

不过,似乎没有办法从 RequestEntity 中获取 HTTP 版本号。

有吗?

最佳答案

RequestEntity 是请求的高级表示,可让您方便地访问对象形式的负载。您所追求的是一个低得多的请求属性,通常 REST 端点不必为此烦恼。

您可以注入(inject) HttpServletRequest 实例,这样您就可以访问协议(protocol)。

@GetMapping("/")
@ResponseBody
public ResponseEntity<String> getSomething(RequestEntity requestEntity,
HttpServletRequest request) {

log.info("HTTP protocol: " + request.getProtocol());

...
}

关于spring - SpringBoot 2.1中判断传入RequestEntity的HTTP版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55847052/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com