SpringMVC 利用注解获取 Session 中的数据

本文介绍了如何在SpringMVC中利用HandlerMethodArgumentResolver接口和自定义注解直接从Session中获取数据,避免重复代码。首先定义自定义注解,然后实现该接口并注册到Spring中。对于Spring和SpringBoot项目,分别提供了配置方法。接着,文章深入源码,从DispatcherServlet的doDispatch()方法开始,解析处理流程,直至找到合适的HandlerMethodArgumentResolver执行。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值