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

本文介绍如何在SpringMVC中通过三种方法将自定义Session注入到控制器的方法参数中,避免每次手动获取,提高代码复用性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景: 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.youkuaiyun.com/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里包装下。





转载于:https://my.oschina.net/u/1244775/blog/497437

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值