如何读取请求参数值在Spring中使用HandlerInterceptor?

时间:2013-12-13 05:32:53

标签: java spring-mvc

我正在使用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请求对象读取参数名称和值。

2 个答案:

答案 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;
    }