文档章节

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

Hades
 Hades
发布于 2016/07/14 18:58
字数 212
阅读 32
收藏 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
车江毅/bsf.mvc

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

车江毅
2017/09/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx 负载均衡

一.配置方式 1.轮询(默认) 优点:实现简单; 缺点:不考虑每台服务器处理能力 2.权重 weight默认是1。如果有多个配置权重的节点,比较相对值。 15:10,只代表访问8080端口的概率是访问908...

imbiao
27分钟前
0
0
jQuery学习笔记180923

jQuery 操作 CSS jQuery 拥有若干进行 CSS 操作的方法。我们将学习下面这些: addClass() - 向被选元素添加一个或多个类 removeClass() - 从被选元素删除一个或多个类 toggleClass() - 对被选...

颖伙虫
38分钟前
1
0
[python] colorama 模块 - 改变控制台输出文本的颜色

除了使用 PyQt 这样的图形化开发框架外,基本上 python 程序都是跑在控制台中的。很多时候,单纯使用黑白的文字不能很好地突出我们要显示的信息。有时候我们需要将错误的提示使用红色标注,而...

cometeme
43分钟前
1
0
Makefile 学习 2 - 基于若干 Blog 的汇总

基于若干 Blog 汇总的 makefile 教程 陈皓 https://blog.csdn.net/haoel/article/details/2886 Makefile 进阶 1. Makefile 中的内容 显式规则。显式规则说明了,如何生成一个或多的的目标文件...

公孙衍
59分钟前
1
0
NIO与BIO的区别、NIO的运行原理和并发使用场景

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的...

Java干货分享
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部