背景:
一个Web项目使用SpringMvc
框架需要前后
分离重建。前端将使用React
,并且用于返回Controllers
视图的后端jsp
的某些内容需要返回jsonObject
。传递到jsp
到ModelMap
的数据现在需要转移到json
并通过Response
回写。为了避免修改每个Controller
,我想出了使用Interceptor
来完成这项工作的想法。它适用于那些使用Controllers
的{{1}}传递数据,但它不适用于ModelMap
传递数据。
问题:
某些控制器返回RedirectAttributes
并使用redirect
来传递属性。由于RedirectAttributes
只有4个参数:postHandler()
和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:如果可以,怎么办?
答案 0 :(得分:0)
我尝试使用AOP
,完美解决了问题。我发现Intercepter
比cut points
更强大。我可以更灵活地定义getArgs()
,并使用ProceedingJoinPoint
的{{1}}方法获取所有参数。