對springmvc入參進行修改的幾個方法 - 相似於修改request裏的paramter

場景: springmvc 的請求入參能夠用@RequestParam 、@ModelAttribute等來自動獲取,但如今有個需求去根據請求參數裏的token去獲取自定義的Session,而後能夠綁定到方法的參數上,而不須要用靜態方法去本身獲取。 java

修改前:  web

@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.  spring

@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. session

<mvc:annotation-driven >
		修改request過來的參數,能夠實現相似於往parameter裏添加參數的功能
		<mvc:argument-resolvers>
			<bean class="TokenHandler"></bean>
		</mvc:argument-resolvers>
	</mvc:annotation-driven>

這裏能夠配置paramHandler來處理入參,具體代碼以下: mvc


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裏包裝下。 app

相關文章
相關標籤/搜索