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

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





你可能感兴趣的:(对springmvc入参进行修改的几个方法 - 类似于修改request里的paramter)