背景:
Web项目使用SpringMvc
框架需要前后 分离 - 重构。前端打算使用React
,而后端的一些Controllers
用于返回jsp
视图需要返回jsonObject
。传递到jsp
到ModelMap
的数据现在需要转移到json
并通过Response
回写。为了避免修改每个Controller
,我想出了使用Interceptor
来完成这项工作的想法。它适用于那些Controllers
通过数据与ModelMap
,但它不适用于那些与RedirectAttributes
通过数据。我怎样才能获得RedirectAttributes在HandlerInterceptor.postHandle()方法问题:
有些控制器返回redirect
和使用RedirectAttributes
传递属性。由于postHandler()
只有4个参数:request,response,handler
和modelAndView
,我很难从这些参数中获得RedirectAttributes
的属性。
控制器代码:
@RequestMapping(value="save")
public String save(CarInfoEntity entity, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes, Model model){
redirectAttributes.addFlashAttribute("message", "success!");
return "redirect:/demo/carInfo/list";
}
拦截代码:
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if(modelAndView != null) {
Map<String, Object> map = modelAndView.getModel();
String json = JSON.toJSONString(map, SerializerFeature.DisableCircularReferenceDetect);
logger.debug(json);
if (null != json) {
try {
response.setHeader("Content-type", "application/json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter pw = response.getWriter();
pw.write(json);
pw.flush();
pw.close();
} catch (IOException e) {
}
}
modelAndView.clear();
}
}
问题1:我能否获得RedirectAttributes
在拦截?
问题2:如果可以,怎么办?