2017-08-15 32 views
1

我们面对的是超级奇怪的问题:在我们的端点:@RequestHeader映射值包含头两次

@PostMapping(value = "/send_event_to_payment_process") 
@Async 
public void sendEvent(@Valid @RequestBody final SendEventRequestDto dto, @RequestHeader(value = TENANT) String foo) { 

映射@RequestHeader变量foo的包含有“”(“测试,两次测试加入了vaue “)。如果我们读编程方式使用请求上下文头:

public void sendEvent(@Valid @RequestBody final SendEventRequestDto dto, @Context final HttpServletRequest request) { 
final String tenant = request.getHeader(TENANT); 

我们得到适当的值(仅一次:“测试”)。

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

谢谢!

+0

听起来像是从String []中进行类型转换。尝试将foo参数的类型更改为String [],以查看您是否获得了2个单独的值 – dimitrisli

+0

您的答案也朝着正确的方向发展。我只是没有理解请求标题的Spring内部处理。也谢谢你的帮助! – xstring

回答

1

您正在比较不同的事情。

HttpServletRequest.getHeader方法总是返回单个值,即使头中有多个值。它将返回第一个(请参阅该方法的javadoc)。

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

要比较同样的事情,你也应该使用getHeaders方法,然后你会有相同的结果。这意味着您的请求包含给定标题的2个标题值。

+0

非常感谢您的帮助。这对我们帮助很大。 – xstring