Spring mvc - 如何在拦截器中获取映射信息?
ex - 当用户请求 / user / 12345 网址时,我想在拦截器中获取 / user / {id} 字符串。 我该怎么办?
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String mappingUri = someMethod(); // get "/post/{id}"; but not /post/12345
return true;
}
答案 0 :(得分:0)
我真的不建议这样做。只应为控制器处理程序方法知道path元素的标识符名称。你的拦截器没有业务知道它。更重要的是,如果此逻辑仅适用于该映射,您可以将其置于处理程序方法中并使用@PathVariable
。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Map<String, String> uriTemplateVars = (Map<String, String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
return true;
}
您现在可以使用任何键,例如"id"
来检索uriTemplateVars
中的路径元素。
答案 1 :(得分:0)
以下代码返回[“/ user / {id}”]
public static List<String> getMappingInfo(HandlerMethod method) {
String prefixs[] = method.getBean().getClass().getAnnotation(RequestMapping.class).value();
if (ArrayUtils.isEmpty(prefixs))
prefixs = new String[] { "" };
String mappings[] = method.getMethod().getAnnotation(RequestMapping.class).value();
List<String> info = new ArrayList<>();
for (String prefix : prefixs) {
for (String mapping : mappings) {
info.add(prefix + "/" + mapping);
}
}
return info;
}