【736c677c4】在SpringMVC中获取URL和Controller映射关系的两种办法 (亲测可用)
2017-12-21 09:55
387 查看
package com.jeeplus.modules.dynamictrace.web; import com.jeeplus.core.web.BaseController; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition; import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition; import org.springframework.web.servlet.mvc.method.RequestMappingInfo; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; /** * 市长信箱Controller * @author Slg * @version 2017-10-02 */ @Controller @RequestMapping(value = "${adminPath}/dynamictrace") public class URLMappingController extends BaseController { /**************************************第一种方法(比较复杂)********************************************/ private class RequestToMethodItem { public String controllerName; public String methodName; public String requestType; public String requestUrl; public Class<?>[] methodParmaTypes; public RequestToMethodItem(String requestUrl, String requestType, String controllerName, String requestMethodName, Class<?>[] methodParmaTypes) { this.requestUrl = requestUrl; this.requestType = requestType; this.controllerName = controllerName; this.methodName = requestMethodName; this.methodParmaTypes = methodParmaTypes; } } @RequestMapping(value = "/temp", method = RequestMethod.GET) public String index(HttpServletRequest request) { ServletContext servletContext = request.getSession().getServletContext(); if (servletContext == null) { return null; } WebApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(servletContext); //请求url和处理方法的映射 List<RequestToMethodItem> requestToMethodItemList = new ArrayList<RequestToMethodItem>(); //获取所有的RequestMapping Map<String, HandlerMapping> allRequestMappings = BeanFactoryUtils.beansOfTypeIncludingAncestors(appContext, HandlerMapping.class, true, false); for (HandlerMapping handlerMapping : allRequestMappings.values()) { //本项目只需要RequestMappingHandlerMapping中的URL映射 if (handlerMapping instanceof RequestMappingHandlerMapping) { RequestMappingHandlerMapping requestMappingHandlerMapping = (RequestMappingHandlerMapping) handlerMapping; Map<RequestMappingInfo, HandlerMethod> handlerMethods = requestMappingHandlerMapping.getHandlerMethods(); for (Map.Entry<RequestMappingInfo, HandlerMethod> requestMappingInfoHandlerMethodEntry : handlerMethods.entrySet()) { RequestMappingInfo requestMappingInfo = requestMappingInfoHandlerMethodEntry.getKey(); HandlerMethod mappingInfoValue = requestMappingInfoHandlerMethodEntry.getValue(); RequestMethodsRequestCondition methodCondition = requestMappingInfo.getMethodsCondition(); PatternsRequestCondition patternsCondition = requestMappingInfo.getPatternsCondition(); String requestType=""; String requestUrl =""; for (RequestMethod m:methodCondition.getMethods()) { requestType=m.name(); } for (String s:patternsCondition.getPatterns()) { requestUrl=s; } String controllerName = mappingInfoValue.getBeanType().toString(); String requestMethodName = mappingInfoValue.getMethod().getName(); Class<?>[] methodParamTypes = mappingInfoValue.getMethod().getParameterTypes(); RequestToMethodItem item = new RequestToMethodItem(requestUrl, requestType, controllerName, requestMethodName, methodParamTypes); requestToMethodItemList.add(item); } break; } } return ""; } /*************************************第二种方法(比较简单)************************************************/ public WebApplicationContext getWebApplicationContext(ServletContext sc) { return WebApplicationContextUtils.getRequiredWebApplicationContext(sc); } @RequestMapping(value = "/getUrlMapping", method = RequestMethod.GET) public String getUrlMapping(HttpServletRequest request) { WebApplicationContext wc = getWebApplicationContext(request.getSession().getServletContext()); RequestMappingHandlerMapping rmhp = wc.getBean(RequestMappingHandlerMapping.class); Map<RequestMappingInfo, HandlerMethod> map = rmhp.getHandlerMethods(); for (Iterator<RequestMappingInfo> iterator = map.keySet().iterator(); iterator .hasNext();) { RequestMappingInfo info = iterator.next(); HandlerMethod method = map.get(info); System.out.println(method.getMethod().getDeclaringClass().toString()+ "--"); System.out.println("ConsumesCondition"+info.getConsumesCondition()); System.out.println("HeadersCondition"+info.getHeadersCondition()); System.out.println("MethodsCondition"+info.getMethodsCondition()); System.out.println("ParamsCondition"+info.getParamsCondition()); System.out.println("PatternsCondition"+info.getPatternsCondition()); System.out.println("ProducesCondition"+info.getProducesCondition()); System.out.println("============================"); //System.out.print(method.getMethodAnnotation(RequestMapping.class).params()[0]); } return ""; } }
相关文章推荐
- springMVC源码分析--AbstractHandlerMethodMapping获取url和HandlerMethod对应关系(十)
- 采用SimpleUrlHandlerMapping的一个Controller的两种映射
- SpringMVC项目中获取所有URL到Controller Method的映射
- 基于注解的Spring MVC的URL与Controller映射关系提取的实现分析
- 获取SpringMVC中所有RequestMapping映射URL地址
- SpringMVC使用注解完成 URL 和 Controller & 方法之间的映射细节
- 基于注解的Spring MVC的URL与Controller映射关系提取的实现分析
- SpringMVC使用注解完成 URL 和 Controller & 方法之间的映射细节
- 基于注解的Spring MVC的URL与Controller映射关系提取的实现分析
- SpringMVC项目中获取所有URL到Controller Method的映射
- SpringMVC学习系列(3) 之 URL请求到Action的映射规则
- SpringMVC(3)URL请求到Action的映射规则
- SpringMVC框架笔记整理(二): 注解式控制器-URL路径映射
- 在Controller中通过非注解的方式获取spring和springMVC上下文的方式
- 在ASP.NET MVC 中获取当前URL、controller、action
- SpringMVC学习系列(3) 之 URL请求到Action的映射规则
- SpringMVC学习系列(3) 之 URL请求到Action的映射规则
- SpringMVC实现Controller的两种方法:配置和约定