XML配置
<mvc:annotation-driven>
<mvc:argument-resolvers>
<bean class="com.liyao.pre.UserIdArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
Resolver代码
@Component
public class UserArgResolver implements WebArgumentResolver {
@Resource
IPolyUserService iPolyUserService;
@Override
public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) throws Exception {
//判断传入参数类型
if (methodParameter.getParameterType().equals(SessionUser.class)) {
final HttpServletRequest nativeRequest = (HttpServletRequest) webRequest.getNativeRequest();
final Object attribute = nativeRequest.getAttribute(WebConstants.SESSION_USER);
if(attribute instanceof SessionUser){
return attribute;
}else{
// 判断是否登录,返回值更新 sessionUser
SessionUser sessionUser = iPolyUserService.checkLogin(nativeRequest);
if(sessionUser.getLogined()){
return sessionUser;
}else {
return null;
}
}
}
return UNRESOLVED;
}
}
具体应用场景:
@RequestMapping("shop-list")
public String toShopIdList(@RequestParam(value = "shopId", required = true)
SessionUser sessionUser) {
if(sessionUser.userId = "123")
...
}
Controller里的Session参数,在resolveArgument里进行处理,增加/修改为需要的信息,然后再Controller里使用。