文档章节

为@RequestMapping标注的方法扩展其传入参数

Hades
 Hades
发布于 2016/07/14 18:58
字数 212
阅读 28
收藏 0
点赞 0
评论 0

从Spring3.1开始有了HandlerMethodArgumentResolver接口,可以为@RequestMapping标注的方法扩展其传入参数。

首先,自定义注解CurrentUser

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrentUser {

	/**
     * 当前用户在request中的名字 默认user
     *
     * @return
     */
    String value() default "user";
}

然后,实现HandlerMethodArgumentResolver接口

import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {

    public CurrentUserMethodArgumentResolver() {
    }

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        if (parameter.hasParameterAnnotation(CurrentUser.class)) {
            return true;
        }
        return false;
    }

    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        CurrentUser currentUserAnnotation = parameter.getParameterAnnotation(CurrentUser.class);
        return webRequest.getAttribute(currentUserAnnotation.value(), NativeWebRequest.SCOPE_REQUEST);
    }
}

在Spring-MVC的配置文件中加入以下配置:

<mvc:annotation-driven>
    <mvc:argument-resolvers>
        <bean class="xx.xx.xx.CurrentUserMethodArgumentResolver" />
    </mvc:argument-resolvers>
</mvc:annotation-driven>

这样,你就可以在有@RequestMapping标注的的方法中使用了,如

    @RequestMapping(value = "index")
    public String index(@CurrentUser User user, Model model) {
        System.out.println(user.getUsername());
        return "admin/index";
    }

 

© 著作权归作者所有

共有 人打赏支持
Hades
粉丝 0
博文 11
码字总数 1193
作品 0
江北
后端工程师
SpringMvc的URL映射和传参案例

腾飞工作室
2016/08/18
10
0
SpringMVC----RequestMapping映射请求

1.SpringMVC使用@RequestMapping注解为控制指定可以处理哪些URL请求。 2.在控制器的类定义及方法定义处都可标注。 @RequestMapping --类定义处:提供初步的请求映射信息。相对于WEB应用的根目...

Rickxue
2015/12/13
106
0
SpringMVC常用注解,返回方式,路径匹配形式,验证

常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解 @RequestMapping 可以标注在类定义处,将 Cont...

随智阔
2014/03/09
0
0
SpringMVC常用基础知识

常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解 @RequestMapping 可以标注在类定义处,将 Cont...

ForingY
2015/11/25
11
0
springmvc 基于注解的controller

@Controller 基于注解的 Controller 终于来到了基于注解的 Spring MVC 了。之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响应请...

李永china
2016/05/16
52
0
Spring MVC 中的基于注解的 Controller

Spring MVC 中的基于注解的 Controller @Controller基于注解的 Controller 终于来到了基于注解的 Spring MVC 了。之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相...

扁-哥
2013/05/06
0
6
SpringMVC注解类之@RequestMapping

1.在Controller控制器类的类定义和方法定义处都可以标注@RequestMapping注解: ·类定义处:提供初步的请求映射信息,相对于WEB应用的根目录 ·方法定义处:提供进一步的映射信息,相对于类定...

chengzequn5210
2016/11/02
28
0
车江毅/bsf.mvc

springboot的扩展实现,让springboot开发更加简单;形成demo模板,以后开发更方便。 自动requestmapping(无需配置)实现。 freemarker java扩展实现,使freemarker更加便于使用。 request 参数...

车江毅
2017/09/21
0
0
【3】springmvc常用注解之@Controller和@RequestMapping

对于各种注解而言,排第一的当然是“@Controller”,表明某类是一个controller。 “@RequestMapping”请求路径映射,如果标注在某个controller的类级别上,则表明访问此类路径下的方法都要加上...

dkz
2014/09/20
0
10
SpringMVC(二):基于注解的SpringMVC入门

1、使用注解时需要注意xml的配置 <mvc:annotation-driven /> 对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用。即解决了@Controller标识的类的bean的注入和使用。 会自动...

_Roger_
2015/09/12
254
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

命令

sudo nginx -s reload 重启nginx sudo lsof -i -P | grep -i "listen" 查看端口占用

那个猴子
4分钟前
0
0
用scrapy-redis爬去新浪-以及把数据存储到

需求:爬取新浪网导航页(http://news.sina.com.cn/guide/)所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。 准备工作: a.安装redis(windows或者linux) b.安装Redis Des...

丁典
4分钟前
0
0
PHP常用函数篇

1.为什么要使用函数? 除了内建的PHP函数,我们可以创建我们自己的函数。 函数是可以在程序中重复使用的语句块。 使代码逻辑更清晰 避免过多的全局变量 封装后避免相同逻辑重复代码,只需调用...

天地有涯风有信_大海无量不见人
5分钟前
0
0
对List分组

在日常工作中会遇到这样的情景,我们需要对List按照List中对象的一个值进行分组。比如一个Human的List,我们要根据性别分组,传统的方法是做双层循环,逐个对比,今天我要介绍一种详单简单的...

珂jack
7分钟前
0
0
分析jquery ajax jsonpCallback回调函数名包含点号报错问题

现象 项目中涉及到跨域请求,采用jquery ajax jsonp来实现,但是遇到一个奇怪问题,在设置回调函数名称时,若包含点号,如“Callback.Success”,那么执行完成后,其error回调函数始终会被触...

iwaller
10分钟前
0
0
【Graphql实践】使用 Apollo(iOS) 访问 Github 的 Graphql API

最近在协助调研 Apollo 生成的代码是否有可能跨 Query 共享模型的问题,虽然初步结论是不能,并不是预期的结果,但是在调研过程中积累的一些经验,有必要记录下。如果你也对 Graphql 感兴趣,...

ios122
10分钟前
1
0
聊聊spring cloud的AsyncLoadBalancerAutoConfiguration

序 本文主要研究一下AsyncLoadBalancerAutoConfiguration AsyncLoadBalancerAutoConfiguration spring-cloud-commons-2.0.0.RELEASE-sources.jar!/org/springframework/cloud/client/loadba......

go4it
19分钟前
0
0
10.19 iptables规则备份和恢复 ,firewalld的9个zone,service的操作

保存和备份iptables规则 内容: 保存iptables规则 service iptables save 把iptables规则备份到my.ipt文件中: iptables-save > my.ipt 恢复刚才备份的规则: iptables-restore < my.ipt 1.......

Linux_老吴
22分钟前
0
0
Vue 自动化表单相关资料

1.使用vue自动化表单 2.Vue可视化,Vue代码生成,Vue动态表单 3.前端表单进阶之路:通过 Vue.js 实现表单可配置化 4.使用Vue动态生成form表单 5.autoform-devtool 6.Vue.js实践:实现多条件筛...

IT追寻者
23分钟前
0
0
动态SQL

一、动态SQL 1、if <select id="findActiveBlogWithTitleLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title l......

一个yuanbeth
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部