加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:15:26 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 可以方便是根据URI定位到spring mvc的controller代码, @Controller@RequestMapping("/admin/util")public class SystemController { private static

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

可以方便是根据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",HttpServletResponse.class));
                        } else {
                            uriMapMethod.append(handler.getClass().getName());
                        }
                        break;
                    }
                } catch (HttpRequestMethodNotSupportedException e) {
                     return getHandler(httpServletRequestWrapper,"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

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读