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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34169240/article/details/81184985


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

//Controller 层----

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



//serviceimpl层----

 @Autowired
 private final RequestMappingHandlerMapping requestMapping = null;

@Override
    public List<Map<String, String>> getActions(String moduleUrl) {
        List<Map<String, String>> resultMap = new ArrayList<Map<String, String>>();
        Map<RequestMappingInfo, HandlerMethod> maps = requestMapping.getHandlerMethods();
        if ((moduleUrl != null || (!"".equals(moduleUrl))) &&
                (maps == null || maps.isEmpty()))
            return resultMap;
        for (RequestMappingInfo val : maps.keySet()) {
            Set<String> 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<String, String> item = new HashMap<String, String>();
                            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<RequestMappingInfo, HandlerMethod> 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

猜你喜欢

转载自blog.csdn.net/qq_34169240/article/details/81184985