一个根据URI定位到spring mvc映射代码工具类
2018-07-20 来源:open-open
可以方便是根据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
标签: 代码
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。
下一篇:JAVA导出成CSV文件
最新资讯
热门推荐