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
微信公众号: