获取跟url有关的方法【从Spring MVC中获取Controller中的请求信息】



在我们平常的项目里面经常需要进行权限配置,其中有一个就是先把项目里面的请求的路径存进去,之后在进行一系列的设置,但是每次都要从代码里面复制粘帖就很麻烦了。
   在Spring MVC中是可以很方便的获取到请求的信息的。

 

//Controller 层----

 @RequestMapping(value = "/Authority", params = "requestMapping", name = "读取指定功能 
 模块的所有Action的URL地址")
 @ResponseBody
 @SystemLog(eventType = 0, operDec = "获取指定模块所有Action地址", operType = 4)
 public List> authority(String moduleUrl) {
     return authService.getActions(moduleUrl);
 }



//serviceimpl层----

 @Autowired
 private final RequestMappingHandlerMapping requestMapping = null;

@Override
    public List> getActions(String moduleUrl) {
        List> resultMap = new ArrayList>();
        Map maps = requestMapping.getHandlerMethods();
        if ((moduleUrl != null || (!"".equals(moduleUrl))) &&
                (maps == null || maps.isEmpty()))
            return resultMap;
        for (RequestMappingInfo val : maps.keySet()) {
            Set urls = val.getPatternsCondition().getPatterns();
            String[] arrayUrl = urls.toArray(new String[0]);
            int urlIndex = Arrays.binarySearch(arrayUrl, "/" + moduleUrl);
            if (urlIndex >= 0) {
                String parentUrl = "";
                Class classz = maps.get(val).getBeanType();
                //取得类的 注解路径
                RequestMapping rm = (RequestMapping) classz.getAnnotation(RequestMapping.class);
                if (rm != null)
                    parentUrl = getArrayOneValue(rm.value());
                //System.out.println(Arrays.toString(rm.value()));
                //取得方法的注解路径
                Method[] methods = classz.getDeclaredMethods();
                for (Method method : methods) {
                    try {
                        rm = (RequestMapping) method.getAnnotation(RequestMapping.class);
                        if (rm != null) {
                            String requestMappingValue = getArrayOneValue(rm.value());
                            String requestMappingParam = getArrayOneValue(rm.params());
                            String requestMappingName = rm.name();
                            if (requestMappingValue.indexOf("/") < 0)
                                requestMappingValue = '/' + requestMappingValue;
                            Map item = new HashMap();
                            item.put("url", parentUrl + requestMappingValue);
                            item.put("desc", requestMappingName);
                            item.put("params", requestMappingParam);
                            resultMap.add(item);
                        }
                    } catch (NullPointerException error) {
                        error.printStackTrace();
                    }
                }
                break;
            }
        }
        return resultMap;
    }

以下引用自https://blog.csdn.net/zheng_sida/article/details/54583292的解释

 



   在我们平常的项目里面经常需要进行权限配置,其中有一个就是先把项目里面的请求的路径存进去,之后在进行一系列的设置,但是每次都要从代码里面复制粘帖就很麻烦了。
   在Spring MVC中是可以很方便的获取到请求的信息的。

 

在Spring MVC已经可用的情况下,直接注入RequestMappingHandlerMapping

//获取所有的请求信息
Map requestMappingInfoMap = requestMappingHandlerMapping.getHandlerMethods();
  • RequestMappingInfo:就是@RequestMapping 对应的信息; 
    HandlerMethod:@RequestMapping对应方法的详情,包括方法、类及参数。

下面是获取几个常用的信息:

 //请求路径
PatternsRequestCondition patternsRequestCondition = requestMappingInfo.getPatternsCondition();
//请求方法(GET,POST等)
RequestMethodsRequestCondition requestMethodsRequestCondition = requestMappingInfo.getMethodsCondition();
//请求的媒体类型(application/json,text/html等)
ProducesRequestCondition producesCondition = requestMappingInfo.getProducesCondition();

参考 :https://blog.csdn.net/zheng_sida/article/details/54583292

你可能感兴趣的:(Java)