2012-04-04 22 views
6

我有一個攔截器,用於記錄Spring MVC響應的結果。我的所有響應都會返回具有JSON正文內容的ResponseEntity對象。spring mvc攔截器:在postHandle中訪問ResponseEntity

我想從ResponseEntity中獲取響應正文和http狀態。

如何從postHandle方法屬性訪問ResponseEntity?

public void postHandle(HttpServletRequest request, 
    HttpServletResponse response, 
    Object handler, 
    ModelAndView modelAndView) {} 

modelAndView屬性對我的調用爲空。

感謝, 傑森

回答

1

我已經找到一個完整的解決方案,以及一個部分解決方案。

部分解決方案: 對於那些使用Servlet 3.0的人來說,HttpServletResponse對象上提供了HTTPStatus代碼。這可以解決我的一半問題,因爲我可以獲取狀態代碼,但它仍然無法訪問具有我想檢查的主體屬性的ResponseEntity。

完整解決方案(適用於Servlet 2.x): 我使用了Aspect和Interceptor的組合。

Aspect被編碼爲針對返回ResponseEntities的控制器方法的@AfterReturn。它基本上捕獲了返回的ResponseEntity並將其放入一個ThreadLocal <ResponseEntity>集合中。

攔截器然後要求方面的線程的響應和TA-DAH它可以訪問。

我希望這個答案可以幫助別人。 乾杯, 傑森

+0

我用這個解決了它,傑森。 [https://stackoverflow.com/questions/26756811/post-processing-of-a-json-response-in-spring-mvc] – Lucas 2017-05-24 17:14:10

2

當你寫你的問題,我認爲這是不可能的,但現在它是。 從自己的文件http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping-intercepto

「注意的HandlerInterceptor的的postHandle方法並不總是非常適用於和@ResponseBody方法ResponseEntity使用。在這種情況下,一個HttpMessageConverter寫入和提交的postHandle調用之前這使得它無法響應要改變應答,例如增加一個報頭而不是應用程序可以實現ResponseBodyAdvice並且或者聲明它作爲一個@ControllerAdvice豆或直接在RequestMappingHandlerAdapter」

0
@ControllerAdvice 
public class ResponseDTOFilterAdvice implements ResponseBodyAdvice<Object> { 
    @Override 
    public boolean supports(final MethodParameter returnType, final Class<? extends HttpMessageConverter<?>> converterType) { 
     return true; 
    } 

    @Override 
    public Object beforeBodyWrite(final Object body, final MethodParameter returnType, final MediaType selectedContentType, 
     final Class<? extends HttpMessageConverter<?>> selectedConverterType, final ServerHttpRequest request, 
     final ServerHttpResponse response) { 
     if (body instanceof ResponseDTO<?>) { 
      ResponseDTO<?> responseDTO = (ResponseDTO<?>) body; 
      responseDTO.setHostname(request.getLocalAddress().getHostName()); 
     } 
     return body; 
    } 
} 

源配置它:Post processing of a Json response in spring MVC