我想在每個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