可以方便是根据URI定位到spring mvc的controller代码,
@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(); } }
来自:http://my.oschina.net/u/565351/blog/372300
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/8021.html