SpringMVC 利用注解获取 Session 中的数据
1. HandlerMethodArgumentResolver 的使用
通常来说,我们获取获取 Session 中的数据,比如 登录用户 LoginUserVO,都是在方法中注入 HttpSession,然后执行
LoginUserVO attribute = (LoginUserVO) session.getAttribute(“login_user_key”);
来获取,因为用到的地方比较多,每次都得写重复的代码还得进行数据的转换就会很恶心;
SpringMVC 可以让我们通过 HandlerMethodArgumentResolver 接口实现 利用注解或不需要注解 直接从方法中注入 Session 中的数据,就像 HttpServletRequest 一样,比如下面的效果:
// 首先在登录时候将当前用户的信息放入 session 中;
request.getSession().setAttribute("login_user_key", loginUser);
// 直接通过自定义标签 @LoginUserBody 获取 session 中的 登录用户数据;
@PutMapping(value = "operation")
public boolean testArgument(@LoginUserBody LoginUserVO loginUser) {
System.out.println(loginUser.getTrueName() + " 这里的 loginUser 已经获取");
return true;
}
那么具体怎么实现呢?
首先,先定义自定义注解
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUserBody {
}
然后实现 HandlerMethodArgumentResolver 接口
public class LoginUserArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
// 判断方法的这个参数是否是否使用了 @LoginUserBody
return parameter.hasParameterAnnotation(LoginUserBody.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory)
throws Exception {
// 返回 session 中的用户数据
return webRequest