• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > 详解获取Spring MVC中所有RequestMapping以及对应方法和参数

详解获取Spring MVC中所有RequestMapping以及对应方法和参数

作者:Y橡树Y 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Y橡树Y 通过本文主要向大家介绍了requestmapping详解,@requestmapping,@requestmapping参数,@requestmapping注解,requestmapping用法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在Spring MVC中想要对每一个URL进行权限控制,不想手工整理这样会有遗漏,所以就动手写程序了。代码如下:

  /**
   * @return 
   * @author Elwin ZHANG
   * 创建时间:2017年3月8日 上午11:48:22
   * 功能:返回系统中的所有控制器映射路径,以及对应的方法
   */
  @RequestMapping(value = "/maps", produces = "application/json; charset=utf-8")
  @ResponseBody 
  public Object getMapPaths(){
    String result="";
     RequestMappingHandlerMapping rmhp = springHelper.getObject(RequestMappingHandlerMapping.class); 
      Map<RequestMappingInfo, HandlerMethod> map = rmhp.getHandlerMethods(); 
      for(RequestMappingInfo info : map.keySet()){ 
        result +=info.getPatternsCondition().toString().replace("[", "").replace("]", "")+ "\t"   ;
        HandlerMethod hm=map.get(info);
        result +=hm.getBeanType().getName()+ "\t"   ;
        result +=getMethodParams(hm.getBeanType().getName(),hm.getMethod().getName())+ "\t"; 
        result +=info.getProducesCondition().toString().replace("[", "").replace("]", "")+ "\t"   ;
        result += "\r\n"; 
      } 
    return result;
  }
</div>

getMethodParams是专门用于获取方法中参数名称的函数,因为用Java自身的反射功能是获取不到的,浪费我不少时间,后来网上看到JBOSS的JAVAssist类可以。其实这个JAVAssist类库也被封装在Mybatis中,如果系统使用了Mybatis,则直接引入可以使用了。

import org.apache.ibatis.javassist.*;
import org.apache.ibatis.javassist.bytecode.*;
</div>

getMethodParams 的实现如下:

/**
   * @param className 类名
   * @param methodName 方法名
   * @return 该方法的声明部分
   * @author Elwin ZHANG
   * 创建时间:2017年3月8日 上午11:47:16
   * 功能:返回一个方法的声明部分,包括参数类型和参数名
   */
  private String getMethodParams(String className,String methodName){
    String result="";
    try{
      ClassPool pool=ClassPool.getDefault();
       ClassClassPath classPath = new ClassClassPath(this.getClass());
       pool.insertClassPath(classPath);
      CtMethod cm =pool.getMethod(className, methodName); 
     // 使用javaassist的反射方法获取方法的参数名 
      MethodInfo methodInfo = cm.getMethodInfo(); 
      CodeAttribute codeAttribute = methodInfo.getCodeAttribute(); 
      LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag); 
      result=cm.getName() + "(";
      if (attr == null) { 
        return result + ")";
      } 
      CtClass[] pTypes=cm.getParameterTypes();
      String[] paramNames = new String[pTypes.length]; 
      int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1; 
      for (int i = 0; i < paramNames.length; i++) {
        if(!pTypes[i].getSimpleName().startsWith("HttpServletRe")){
          result += pTypes[i].getSimpleName();
          paramNames[i] = attr.variableName(i + pos); 
          result += " " + paramNames[i]+","; 
        }
      }
      if(result.endsWith(",")){
        result=result.substring(0, result.length()-1);
      }
      result+=")";
    }catch(Exception e){
      e.printStackTrace();
    }
    return result;
  }
</div>

这样就可以获得每个URL路径与期对应的方法声明了。

另外SpringHelper是自己封装的Spring工具类,可以用来直接获取Spring管理的Bean,代码如下:

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;

/**
 * @author Elwin ZHANG 
 * 创建时间:2016年4月14日 上午9:12:13 
 * 功能:Spring 工具类,用于获取Spring管理的Bean
 */
@Component
public class SpringHelper implements ApplicationContextAware {
  // 日志输出类
  private static Logger logger = Logger.getLogger(SpringHelper.class);

  // 当前的Spring上下文
  private static ApplicationContext applicationContext;

  @Override
  public void setApplicationContext(ApplicationContext arg0)
      throws BeansException {
    applicationContext = arg0;
  }

  /**
   * @param beanName bean Id
   * @return 如果获取失败,则返回Null
   * @author Elwin ZHANG
   * 创建时间:2016年4月14日 上午9:52:55
   * 功能:通过BeanId获取Spring管理的对象
   */
  public Object getObject(String beanName) {
    Object object = null;
    try {
      object = applicationContext.getBean(beanName);
    } catch (Exception e) {
      logger.error(e);
    }
    return object;
  }


  /**
   * @return 
   * @author Elwin ZHANG
   * 创建时间:2017年3月7日 下午3:44:38
   * 功能:获取Spring的ApplicationContext
   */
  public ApplicationContext getContext() {
    return applicationContext;
  }

  /**
   * @param clazz 要获取的Bean类
   * @return 如果获取失败,则返回Null
   * @author Elwin ZHANG
   * 创建时间:2016年4月14日 上午10:05:27
   * 功能:通过类获取Spring管理的对象
   */
  public <T> T getObject(Class<T> clazz) {
    try {
      return applicationContext.getBean(clazz);
    } catch (Exception e) {
      logger.error(e);
    }
    return null;
  }

/**
 * @param code 配置文件中消息提示的代码
 * @param locale 当前的语言环境
 * @return 当前语言对应的消息内容
 * @author Elwin ZHANG
 * 创建时间:2016年4月14日 上午10:34:25
 * 功能:获取当前语言对应的消息内容
 */
  public String getMessage(String code,Locale locale){
    String message;
    try{
      message=applicationContext.getMessage(code, null, locale);
    }catch(Exception e){
      logger.error(e);
      message="";
    }
    return message;
  }

  /**
   * 
   * @param code 配置文件中消息提示的代码
   * @param request 当前的HTTP请求
   * @return 当前语言对应的消息内容
   * @author Elwin ZHANG
   * 创建时间:2016年4月14日 下午3:03:37
   * 功能:获取当前语言对应的消息内容
   */
  public String getMessage(String code,HttpServletRequest request){
    String message;
    try{
      message=applicationContext.getMessage(code, null, getCurrentLocale(request));
    }catch(Exception e){
      logger.error(e);
      message="zh_CN";
    }
    return message;
  }

  /**
   * @param request 当前的HTTP请求
   * @return 当前用户Cookie中的语言
   * @author Elwin ZHANG
   * 创建时间:2016年4月14日 下午2:59:21
   * 功能:当前用户保存Cookie中的默认语言
   */
  public Locale getCurrentLocale(HttpServletRequest request){
    return resolver.resolveLocale(request);
  }

  //Cookie本地语言解析器,Spring提供
  @Autowired
  CookieLocaleResolver resolver;
}

</div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解获取Spring MVC中所有RequestMapping以及对应方法和参数

相关文章

  • 2017-05-28Mac Book中Java环境变量设置的方法
  • 2017-05-28java数据结构与算法之简单选择排序详解
  • 2017-05-28Java中LinkedList详解和使用示例_动力节点Java学院整理
  • 2017-05-28Java微信公众平台开发(6) 微信开发中的token获取
  • 2017-05-28Linux下用java -jar运行可执行jar包的方法教程
  • 2017-05-28SpringBoot的服务注册与发现示例
  • 2017-05-28Java工程中使用Mybatis (工程结合Mybatis,数据结合Swing使用))
  • 2017-05-28Spring依赖注入的两种方式(根据实例详解)
  • 2017-05-28java中参数传递方式详解
  • 2017-05-28java实现微信H5支付方法详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 深入理解Java注解类型(@Annotation)
    • Java正则表达式_动力节点Java学院整理
    • 史上最简单的MyBatis动态SQL入门示例代码
    • Java事务管理学习之JDBC详解
    • 数据库阿里连接池 druid配置详解
    • Java 加密解密基础分类及模式归纳整理
    • 深入讲解Java 9中的九个新特性
    • 利用spring aop实现动态代理
    • 详解java中通过post方式访问后台服务器
    • Java正则表达式之split()方法实例详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有