我正在使用HandlerInterceptor来触发我的应用程序中发生的所有事件/操作并将其保存到审计表中。在表中我保存了诸如servername,session,parameters等信息。
因此,使用HandlerInterceptor,我如何读取所有这些参数值以及我在控制器中传递的路径变量值。
这是我的代码:
public class AuditInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
LOG.debug("URL path"+request.getRequestURI());
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
LOG.debug("URL PATH :"+request.getRequestURI());
}
}
我的控制器类在这里输入代码::
public class ABCDController {
@RequestMapping(value="categories",method=RequestMethod.GET)
@ResponseBody
public List<Category> getCategoryList(@RequestParam String divisions){
return service.getCategoryList(divisions);
}
}
那么如何使用HandlerInterceptor的HttpServletRequest请求对象读取参数名称和值。
答案 0 :(得分:3)
Servlet API提供了一种读取请求参数的方法。例如,
ServletRequest.getParameterMap()
返回请求参数的键值映射。
但是,对于Path变量和值,我不知道Spring MVC是否提供了简化的方法,但是再次使用Servlet API,您可以使用HttpServletRequest.getRequestURI()
读取URI。您必须拥有自己的逻辑才能将其拆分为适当的Path参数。
答案 1 :(得分:0)
您应该可以使用以下内容以映射的形式获取变量及其值,
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
final Map<String, String> variableValueMap = (Map<String, String>) request
.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
variableValueMap.forEach((k,v)->System.out.println("Key:"+k+"->"+"Value : "+v));
return true;
}