使用AOP拦截Controller获取@PathVariable注解传入的参数

作者:徒手搬运工 时间:2023-04-30 21:42:09 

AOP拦截Controller获取@PathVariable注解传入参数

前言:

最近项目中需要对controller传入的应用标识(appMarkId)进行校验,appMarkId@PathVariable传入到url模版中的,这里用到了aop统一拦截处理,但是在拦截的过程中发现request获取不到该参数,随后进行了研究。

示例代码:

使用AOP拦截Controller获取@PathVariable注解传入的参数

处理:


Map map = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);

可以用这个方法获取到所有uri模版中传入的参数。

使用AOP拦截Controller获取@PathVariable注解传入的参数

扩展: aop中获取request和response


ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
HttpServletResponse response = servletRequestAttributes.getResponse();

动态参数使用@PathVariable解析

现在有如下的一条超链接


<a href="<c:url value=" rel="external nofollow" /actions/article/readArticle/${article.id}"/> "
                                                target="_blank">${article.title}</a>

这条超链接的特点就是在URL路径中添加了EL表达式解析出来的id值。

因此,在SpringMVC的Controller层中,需要解析它,使用@PathVariable("articleId") Long articleId 来解析。

@PathVariable是专门用来解析URL请求中的动态参数。

在Controller层的代码如下


public static final String URL_ARTICLE_READ = "article/readArticle/{articleId}";
   /**
    * 去文章详情页面
    * 根据URL路径中指定的文章ID号,去获取制定文章的内容
    *
    * @param articleId 指定的文章的ID号
    * @return          获取此文章的数据,并去文章详情页面
    */
   @RequestMapping(value = {URL_ARTICLE_READ} )
   public ModelAndView readArticle(@PathVariable("articleId") Long articleId){
       LOGGER.info("enter article detail page, articleId = {}",articleId);
       final Article article = articleService.getArticleById(articleId);
...
   }

这样,页面上的${article.id}的值,就最终映射到了Java中的Long articleId 上了。

来源:https://blog.csdn.net/IM507/article/details/99823318

标签:AOP拦截,Controller,@PathVariable,参数
0
投稿

猜你喜欢

  • Android studio4.1更新后出现的问题详解

    2022-12-06 03:22:54
  • java和c/c++ 数据类型长度的比较

    2021-06-18 00:07:45
  • 详解SpringCloud的负载均衡

    2022-03-14 03:42:28
  • 基于spring 方法级缓存的多种实现

    2022-12-14 18:31:38
  • Spring MVC 关于controller的字符编码问题

    2023-06-17 09:52:52
  • springboot中.yml文件参数的读取方式

    2021-06-20 00:57:51
  • java HashMap通过value反查key的代码示例

    2022-06-07 08:50:55
  • Java多线程编程之访问共享对象和数据的方法

    2022-10-01 07:05:02
  • Java中七种排序算法总结分析

    2023-03-27 19:41:44
  • 解决idea 暂存文件或idea切换分支代码丢失的问题

    2023-09-11 07:52:41
  • Java线程的生命周期和状态控制_动力节点Java学院整理

    2022-01-25 17:01:42
  • Java基础 Servlet监听器详解

    2022-05-30 20:40:02
  • Mybatis代码生成器Mybatis Generator(MBG)实战详解

    2023-12-02 23:04:31
  • Java面向对象实现汽车租赁系统

    2023-05-20 07:03:06
  • Java常用HASH算法总结【经典实例】

    2023-04-26 00:34:55
  • OnSharedPreferenceChangeListener详解及出现不触发解决办法

    2021-10-25 19:06:36
  • C#计算程序执行过程花费时间的方法

    2022-08-07 08:44:53
  • 基于TCP通信丢包原因总结(推荐)

    2022-04-27 04:37:28
  • C#中使用HttpDownLoadHelper下载文件实例

    2023-05-13 13:13:14
  • 深入浅析Android坐标系统

    2021-12-15 05:26:34
  • asp之家 软件编程 m.aspxhome.com