Spring mvc 如何在HandlerInterceptor.postHandle()方法中获取重定向属性
背景:Spring mvc 如何在HandlerInterceptor.postHandle()方法中获取重定向属性,spring-mvc,interceptor,Spring Mvc,Interceptor,背景: web项目使用SpringMvc框架,需要前后对齐 分离重建。前端将使用React,一些用于返回jsp视图的后端控制器需要返回jsonObject。通过ModelMap传递到jsp的数据现在需要传输到json并通过Response写回。为了避免修改每个控制器,我想出了一个主意,使用拦截器来完成这项工作。它适用于那些控制器使用模型映射传递数据,但不适用于那些使用重定向属性传递数据 问题: 一些控制器返回重定向,并使用重定向属性传递属性。由于postHandler()只有4个参数:reque
web项目使用
SpringMvc
框架,需要前后对齐
分离重建。前端将使用React
,一些用于返回jsp
视图的后端控制器需要返回jsonObject
。通过ModelMap
传递到jsp
的数据现在需要传输到json
并通过Response
写回。为了避免修改每个控制器
,我想出了一个主意,使用拦截器
来完成这项工作。它适用于那些控制器
使用模型映射传递数据
,但不适用于那些使用重定向属性
传递数据
问题:
一些控制器返回重定向
,并使用重定向属性
传递属性。由于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();
}
}
@覆盖
public void postHandle(HttpServletRequest请求、HttpServletResponse响应、对象处理程序、ModelAndView ModelAndView)引发异常{
if(modelAndView!=null){
Map Map=modelAndView.getModel();
字符串json=json.toJSONString(映射,SerializerFeature.DisableCircularReferenceDetect);
debug(json);
if(null!=json){
试一试{
setHeader(“内容类型”,“应用程序/json;字符集=UTF-8”);
响应。setCharacterEncoding(“UTF-8”);
PrintWriter pw=response.getWriter();
write(json);
pw.flush();
关闭();
}捕获(IOE异常){
}
}
modelAndView.clear();
}
}
问题1:我可以在拦截器中获取重定向属性吗?
问题2:如果可以的话,如何解决?我尝试使用AOP
,完美地解决了问题。我发现AOP
比拦截器
更强大。我可以更灵活地定义切点
并使用getArgs()
方法ProceedingJoinPoint
获取所有参数,我尝试使用AOP
,完美地解决了问题。我发现AOP
比拦截器
更强大。我可以更灵活地定义切点,并使用ProceedingJoinPoint
的getArgs()
方法获取所有参数