文档章节

对springmvc入参进行修改的几个方法 - 类似于修改request里的paramter

龙鸣
 龙鸣
发布于 2015/08/26 18:00
字数 412
阅读 2135
收藏 1

场景: springmvc 的请求入参可以用@RequestParam 、@ModelAttribute等来自动获取,但现在有个需求去根据请求参数里的token去获取自定义的Session,然后可以绑定到方法的参数上,而不需要用静态方法去自己获取。

修改前: 

@RequestMapping()
public String test(@RequestParam(requeired = false) String token)
{
    /*意味着每个需要session的地方都需要自己手动获取*/
    Session session =SessionUtil.getSession(token);
}
修改后:
@RequestMapping()
public String test(@ModelAttribute("session")Session session)
{
    /*这里可以直接调用*/
    session.doSomeThing();
}
具体方法有三个(我目前所能找到的):

1. 

@ModelAttribute
    public void getSession(HttpServletRequest request,Model model)
    {
        String token = request.getParameter(GlobalStatic.token_name);
        if (Strings.isNullOrEmpty(token))
        {
            model.addAttribute("session", null);
        }
        else
        {
            System.out.println((String)token);
            model.addAttribute("session", 
            sessionFactory.getSession(token));
        }
    }
这个bind方法可以放在父类Controller里面,你可以根据需求处理没有token的情况。还有就是这个方法还有一些变化,可以参照:
http://blog.csdn.net/li_xiao_ming/article/details/8349115

2.

<mvc:annotation-driven >
		修改request过来的参数,可以实现类似于往parameter里添加参数的功能
		<mvc:argument-resolvers>
			<bean class="TokenHandler"></bean>
		</mvc:argument-resolvers>
	</mvc:annotation-driven>

这里可以配置paramHandler来处理入参,具体代码如下:


public class TokenHandler implements WebArgumentResolver {
    @Override
    public Object resolveArgument(MethodParameter methodParameter,NativeWebRequest webRequest) throws Exception {
        if (methodParameter.getParameterName().equals("token"))
        {
            return new Session();
        }
        return null;
    }
}



上面实现WebArgumentResolver接口,如果有token就会返回session,没有就返回null,可以根据自己业务修改。



3.使用HttpServletRequestWrapper来包装request,然后在filter的chain.dofilter里包装下。





© 著作权归作者所有

共有 人打赏支持
龙鸣
粉丝 3
博文 14
码字总数 5345
作品 0
常州
后端工程师
SpringMVC 基于注解的Controller @RequestMapping @Request

概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能。现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller...

蓝狐乐队
2014/02/28
0
1
SpringMVC基于注解的Controller

本文将介绍 Spring 2.5 新增的 Sping MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML 的 Spring MVC 配置。 一个简单的基于注解的 Controller 使用过低版本 Spring MVC 的读者都知道...

黎嘉诚
2016/08/21
29
0
Spring4.1.6 常用注解

常用的spring注解有如下几种: @Controller @Service @Autowired @RequestMapping @RequestParam @ModelAttribute @Cacheable @CacheFlush @Resource @PostConstruct @PreDestroy @Repositor......

大糊涂
2015/06/10
0
0
同是流行MVC框架,比较Strtus2和SpringMVC的区别

Struts2和SpringMVC是比较流行的MVC框架,二者的工作流程大体相似,从下面两张图就可以看出。 SpringMVC工作流程图 图二 SpringMVC的工作流程描述 1. 用户向服务器发送请求,请求被Spring前端...

非沧海一粟不随波逐流
2016/12/14
28
0
同为框架,Struts2和SpringMVC比较的区别!

Struts2和SpringMVC是比较流行的MVC框架,二者的工作流程大体相似,从下面两张图就可以看出。, SpringMVC工作流程图 图二 SpringMVC的工作流程描述 1. 用户向服务器发送请求,请求被Spring前...

欧阳海阳
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
9
0
现场看路演了!

HiBlock
昨天
19
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
13
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
20
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部