[英]How to populate ModelAndView in HandlerInterceptor for REST service in Spring
我正在使用Spring框架構建RESTfull服務。
我需要根據響應類型在Controller中處理請求后,將自定義Cookie添加到響應中
@Controller
public class SomeController {
...
@RequestMapping(method = RequestMethod.GET, value = MY_PROFILE, produces = PRODUCES)
public @ResponseBody Some myProfile(@RequestBody() A a) {
...
}
...
}
但是到了我的攔截器
public class SomeIntercepter implements HandlerInterceptor {
...
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
...
}
ModelAndView為NULL ,我只能處理請求和響應。
所以我有兩個問題:
示例用例:
假設我正在進行A / B測試,並且基於Response中的Cookie,我的UI呈現的方式有所不同。 我希望有一個地方,可以根據返回對象指定此Cookie。
@ResponseBody
的特殊之處在於,它告訴Spring響應已被處理(或者應該使用返回值進行處理)。 在這種情況下,由於不需要渲染視圖,因此不需要ModelAndView
。 因此,MVC堆棧不會創建ModelAndView
並且將不會對HandlerInterceptor
可用。 基本上,在調用postHandle
,響應已被刷新,您將無法編寫任何cookie。 而且,無論如何, ModelAndView
都不是添加Cookie的適當位置。 HttpServletResponse
是。
當您使用@ResponseBody
,Spring不會使用模型,您甚至都沒有在控制器方法中聲明過它,無論如何它都沒有意義。
但是,您始終可以使用請求屬性將數據從控制器傳遞到攔截器,並且它將能夠在其postHandle
方法中使用它來決定如何處理響應和cookie。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.