SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver)

SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver)

简介

我们 Controller 用到的一些 Bean 需要通过一定的方式去获取的,可以通过注入方式获取其他获取方式进行获取。

比如:需要用到用户实例,我们通常做法为下

@Resource
private UserService userService;

@GetMapping("getUserByUsername")
public String getUserByUsername(HttpServletRequest request) {

    ...
    AuthUser user = userService.getUserByUsername("小明");
    ...
}

这样是一般的做法,我们可以发现 HttpServletRequest 可以通过注入方式加载,也可以直接在 public String getUserByUsername() 方法参数获取到。

这样的方式 也把我们的 User 对象封装到方法参数里。

当我们执行 Controller 就会有一个对应用户的对象存在了。

功能使用

自定义 UserArgumentResolver

这里我们需要使用到一个 HandlerMethodArgumentResolver 接口。

自定义 UserArgumentResolver 处理 User

/**
 * 封装 参数方式获取 {@link AuthUser} 对象
 *
 * @author purgeyao
 * @since 1.0
 */
public class UserArgumentResolver implements HandlerMethodArgumentResolver {

  @Override
  public boolean supportsParameter(MethodParameter methodParameter) {
    Class<?> aClass = methodParameter.getParameterType();
    // 判断是否为 AuthUser 类
    return aClass == AuthUser.class;
  }

  @Override
  public Object resolveArgument(MethodParameter methodParameter,
      ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest,
      WebDataBinderFactory webDataBinderFactory) throws Exception {

    HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);

    // 获取参数
    
    String name = request.getParameter("name");

    // TODO 获取对应的用户对象 查询操作

    AuthUser user = userService.getUserByUsername(name);

    return user;
  }
}

上述代码会在执行 Controller 之前处理。通过获取请求头 或者 请求里的参数(具体看自己的业务)。

执行相应的对象查询操作。接下来就可以在 Controller 参数里可以方便使用了。

Controller 方法参数使用

@GetMapping("getUserByUsername")
public String getUserByUsername(AuthUser user) {
    ...
    user.getAge();
    ...
}

总结

上述介绍 HandlerMethodArgumentResolver 使用,原理请参考相关文章

示例代码地址:
UserArgumentResolver

作者GitHub:

Purgeyao 欢迎关注

qq交流群: 812321371 微信交流群: MercyYao

微信公众号:

SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver)

原文 

https://segmentfault.com/a/1190000021096305

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver)

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址