我想在每个API REST请求上添加一个Elapsed-Time响应头参数,即使那些错误完成了。Spring控制器:添加一个名为Elapsed-Time的响应头参数
例如:
===>
GET /api/customer/123 HTTP/1.1
Accept: application/vnd.company.app.customer-v1+json
<===
HTTP/1.1 200 OK
Content-Type: application/vnd.company.app.customer-v1+json
Elapsed-Time: 12
{ id: 123, name: Jordi, age: 28 }
正在经历时间参数计算为瞬间的@RequestMapping方法完成,并且该@RequestMapping方法启动的瞬间之间毫秒的差异。
我一直在看Spring4 HandlerInterceptorAdapter。 preHandle和postHandle方法似乎完全适合这种情况(尽管执行链中每个拦截器的时间开销)。但是,不幸的是,在postHandle方法中更改响应头没有效果,因为响应已经生成。
注意的HandlerInterceptor的的postHandle方法并不总是非常适用于和@ResponseBody方法ResponseEntity使用。在这种情况下,HttpMessageConverter会在调用postHandle之前写入并提交响应,从而无法更改响应,例如添加标题。相反,应用程序可以实现ResponseBodyAdvice,并将其声明为@ControllerAdvice bean或直接在RequestMappingHandlerAdapter上进行配置。
您是否知道处理这种情况的工作优雅解决方案?
我不认为这种情况是重复Spring - Modifying headers for every request after processing (in postHandle),因为我需要捕获一个变量,其值是开始时间(当请求到达应用程序之前和@RequestMapping方法启动之前),然后使用此变量一次@RequestMapping方法结束,以计算已用时间。
的可能的复制[春天 - 修改为每个请求标题(的postHandle)处理后(https://stackoverflow.com/questions/30702970/弹簧修改头文件为每个请求后处理后处理) – jhyot