首页 > 代码库 > 一个根据URI定位到spring mvc映射代码工具类
一个根据URI定位到spring mvc映射代码工具类
@Controller @RequestMapping("/admin/util") public class SystemController { private static final Logger log = LoggerFactory.getLogger(SystemController .class); @RequestMapping(value = "/findUriMapMethod.do") @ResponseBody public String findUriMapMethod(HttpServletRequest request, HttpServletResponse response) { final Env env = EnvUtils.getEnv(); final String uri = env.param("uri", request.getRequestURI()); return getHandler(request, uri, "GET"); } private String getHandler(HttpServletRequest request, final String uri, String method) { final Env env = EnvUtils.getEnv(); final String fMethod = method; String[] beanNames = env.getApplicationContext().getBeanNamesForType(RequestMappingHandlerMapping.class); log.info("RequestMappingHandlerMapping: {}", Arrays.toString(beanNames)); HttpServletRequestWrapper httpServletRequestWrapper = new HttpServletRequestWrapper(request) { @Override public String getRequestURI() { /*String paramUri = super.getParameter("uri"); if(paramUri != null && !"".equals(paramUri.trim())) { return paramUri; }*/ return uri; } @Override public StringBuffer getRequestURL() { return new StringBuffer(super.getRequestURL().toString() .replace(super.getRequestURI(), uri)); } @Override public String getServletPath() { return super.getServletPath().replace(super.getRequestURI(), uri); } @Override public String getMethod() { if(fMethod == null || "".equals(fMethod)) { return super.getMethod(); } return fMethod; } }; StringBuilder uriMapMethod = new StringBuilder(); uriMapMethod.append(httpServletRequestWrapper.getRequestURI()).append(": ["); if(beanNames != null) { for(String beanName : beanNames) { log.info("beanName: {} ", beanName); RequestMappingHandlerMapping mapping = env.getBean(beanName, RequestMappingHandlerMapping.class); try { HandlerExecutionChain chain = mapping.getHandler(httpServletRequestWrapper); if(chain != null) { Object handler = chain.getHandler(); System.out.println(handler); if(handler instanceof HandlerMethod) { HandlerMethod hm = (HandlerMethod)handler; log.info("{}:{}", hm.getBeanType().getName(),hm); uriMapMethod.append(hm); } else if(handler instanceof org.springframework.web.servlet.mvc.Controller) { org.springframework.web.servlet.mvc.Controller hm = (org.springframework.web.servlet.mvc.Controller)handler; Class<? extends org.springframework.web.servlet.mvc.Controller> hmClass = hm.getClass(); log.info("{}:{}", hmClass.getName(), hmClass.getDeclaredMethod("handleRequest", HttpServletRequest.class, HttpServletResponse.class)); uriMapMethod.append(hmClass.getDeclaredMethod("handleRequest", HttpServletRequest.class, HttpServletResponse.class)); } else { uriMapMethod.append(handler.getClass().getName()); } break; } } catch (HttpRequestMethodNotSupportedException e) { return getHandler(httpServletRequestWrapper, uri, "POST"); } catch (Exception e) { log.error("get uri mapping error.", e); } /*Map<RequestMappingInfo, HandlerMethod> mapMethods = mapping.getHandlerMethods(); if(mapMethods != null) { Iterator<Entry<RequestMappingInfo, HandlerMethod>> iter = mapMethods.entrySet().iterator(); while (iter.hasNext()) { Entry<RequestMappingInfo, HandlerMethod> entry = iter.next(); RequestMappingInfo key = entry.getKey(); HandlerMethod hm = (HandlerMethod)entry.getValue(); Method method = hm.getMethod(); log.info("{} : {}->{}", key.getPatternsCondition(), key, hm); } }*/ } } return uriMapMethod.append("]").toString(); } }
可以方便是根据URI定位到spring mvc的controller代码,
一个根据URI定位到spring mvc映射代码工具类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。