一个根据URI定位到spring mvc映射代码工具类

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
可以方便是根据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多线程示例 模拟生产者消费者

下一篇:JAVA导出成CSV文件