@RequestHeader映射值包含两次标题

时间:2017-08-15 15:33:08

标签: spring spring-mvc spring-boot

我们正面临着一个非常奇怪的问题:在我们的终端中:

@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);

我们收到正确的价值(只有一次:"测试")。

任何线索可能是什么问题?!

谢谢!

1 个答案:

答案 0 :(得分:1)

你正在比较不同的东西。

HttpServletRequest.getHeader方法始终返回单个值,即使标头有多个值也是如此。它将返回第一个(参见方法的javadoc)。

Spring使用HttpServletRequest::getHeaders方法获取所有值。它会检索所有标头值,并根据值返回String[]或创建单个连接的String

要比较相同的事情,您还应该使用getHeaders方法,然后您将获得相同的结果。这意味着您的请求包含给定标头的2个标头值。