一个根据URI定位到spring mvc映射代码工具类详解编程语言

可以方便是根据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

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论