我们正面临着一个非常奇怪的问题:在我们的终端中:
@PostMapping(value = "/send_event_to_payment_process")
@Async
public void sendEvent(@Valid @RequestBody final SendEventRequestDto dto, @RequestHeader(value = TENANT) String foo) {
映射的@RequestHeader变量foo包含两次与','连接的vaue。 ("测试,测试&#34)。如果我们使用请求上下文以编程方式读取标头:
public void sendEvent(@Valid @RequestBody final SendEventRequestDto dto, @Context final HttpServletRequest request) {
final String tenant = request.getHeader(TENANT);
我们收到正确的价值(只有一次:"测试")。
任何线索可能是什么问题?!
谢谢!
答案 0 :(得分:1)
你正在比较不同的东西。
HttpServletRequest.getHeader
方法始终返回单个值,即使标头有多个值也是如此。它将返回第一个(参见方法的javadoc)。
Spring使用HttpServletRequest::getHeaders
方法获取所有值。它会检索所有标头值,并根据值返回String[]
或创建单个连接的String
。
要比较相同的事情,您还应该使用getHeaders
方法,然后您将获得相同的结果。这意味着您的请求包含给定标头的2个标头值。