欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-07 11:26:04
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)