java自定义变量解析,spring boot使用自定义参数解析器

packageio.xiongdi.resolver;importio.xiongdi.annotation.LoginUser;importio.xiongdi.entity.UserEntity;importio.xiongdi.interceptor.AuthorizationInterceptor;importio.xiongdi.service.UserService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.core.MethodParameter;importorg.springframework.stereotype.Component;importorg.springframework.web.bind.support.WebDataBinderFactory;importorg.springframework.web.context.request.NativeWebRequest;importorg.springframework.web.context.request.RequestAttributes;importorg.springframework.web.method.support.HandlerMethodArgumentResolver;importorg.springframework.web.method.support.ModelAndViewContainer;/*** 方法参数解析器接口,这个接口是SpringMVC参数解析绑定的核心接口。

* 不同的参数类型绑定都是通过实现这个接口来实现。

* 也可以通过实现这个接口来自定义参数解析器

*@authorwujiaxing

* @date 2019-06-30*/@Componentpublic class LoginUserHandlerMethodArgumentResolver implementsHandlerMethodArgumentResolver {

@AutowiredprivateUserService userService;/*** 该解析器是否支持parameter参数的解析

*@paramparameter 拦截到的参数

*@return是否符合我们的拦截规则

*

* isAssignableFrom方法作用是判断参数类型是否为UserEntity类或是父类或是父接口

*

*/@Overridepublic booleansupportsParameter(MethodParameter parameter) {return parameter.getParameterType().isAssignableFrom(UserEntity.class) && parameter.hasParameterAnnotation(LoginUser.class);

}/***

* 将方法参数从给定请求(webRequest)解析为参数值并返回

* 请求顺序:

* 1.进入拦截器,拦截有token请求头的用户,说明是验证过的

* 2.进入自定义参数解析器supportsParameter方法,解析带有LoginUser注解并且类UserEntity或父类的参数

* 3.进入自定义参数解析器resolveArgument方法,将存在作用域里的userid拿出来查询到user用户信息,赋给UserEntity参数

*

*@paramparameter

*@parammavContainer

*@paramwebRequest

*@parambinderFactory

*@return*@throwsException*/@Overridepublic Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throwsException {//从请求作用域中获取userid

Object o =webRequest.getAttribute(AuthorizationInterceptor.USER_KEY, RequestAttributes.SCOPE_REQUEST);if (o == null) {return null;

}

UserEntity userEntity= userService.getById((long) o);returnuserEntity;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值