当前位置: 首页 > 科技观察

SpringMvc参数解析器,让你的方法更优雅

时间:2023-03-12 10:27:43 科技观察

spring参数解析器,让你的方法更优雅Tools、utils、scaffolding开始如雨后春笋般冒出来。Spring,顾名思义,奠定了万物复苏的基础,于是大量基于spring的框架开始出现,如springMvc、springboot、springcloud等,一时间生态如出一辙。作为一个多年使用spring的老用户,总是对我们正在使用和开发的各种功能充满好奇,于是摸索、挖掘、模仿各种让人摸不着头脑的设计。今天分享参数解析器,实现和@RequestBody一样的功能。注释会自动注入到需要参数的方法解析器中。废话不多说,直接上代码!功能背景说明:在开发中,常用于控制层对外请求接口输入参数。希望可以通过注解的方式注入当前登录用户信息,以便在接口函数的下行过程中向下传递,实现用户信息获取的实现步骤如下:定义当前登录用户classCurrentUser:importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;/***描述:当前登录用户
*作者:ITLearningDojo
*时间:2022-11-1519:07*/@Data@NoArgsConstructor@AllArgsConstructorpublicclassCurrentUser{privateLonguserId;privateStringuserName;}自定义注解:importjava.lang.annotation.*;/***描述:自定义用户评论
*作者:IT学习道场
*时间:2022-11-1516:56*/@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceWlcUser{}当前用户解析器:importcom.example.demo.annotation.WlcUser;importcom.example.demo.po.CurrentUser;导入org.springframework.core.MethodParameter;导入org.springframework.web.bind.support.WebDataBinderFactory;导入org.springframework.web.context.request.NativeWebRequest;导入org.springframework.web.method.support.HandlerMethodArgumentResolver;importorg.springframework.web.method.support.ModelAndViewContainer;/***描述:CurrentUserParser
*作者:ITLearningDojo
*时间:2022-11-1517:01*/publicclassCurrentUserMethodArgumentResolverimplementsHandlerMethodArgumentResolver{@OverridepublicbooleansupportsParameter(MethodParameterparameter){//方法参数是否有WlcUser注解,如果有则解析执行下面的resolveArgument方法returnparameter.hasParameterAnnotation(WlcUser.class);plicObjectresolveArgument(MethodParameterparameter,ModelAndViewContainermavContainer,NativeWebRequestwebRequest,WebDataBinderFactorybinderFactory)throwsException{//1这里可以从httpHeader中获取用户ID或者其他属性值,也可以进行增删改查,以及rpc通过springIoc中的bean,但是使用spring的上下文获取bean//2也可以从token中解析出当前登录用户信息,返回对象CurrentUser//3也可以从usercontext你自己定义,只要你自己想要写一个usercontext//4这里调用sprinIoc管理的bean,需要SpringContextUtilcontext来获取bean,调用方法//5这里只要创建一个新建当前用户直接添加WlcUser注解修改对象CurrentUsercurrentUser=newCurrentUser(1L,"老王");返回当前用户;}}将参数解析器注入到mvc中:.servlet.config.annotation.WebMvcConfigurer;importjava.util.List;/***描述:web拦截器,解析器配置类
*作者:IT学习道场
*时间:2022-11-1519:09*/@ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddArgumentResolvers(Listresolvers){resolvers.add(newCurrentUserMethodArgumentResolver());}}}现在测试控制器测试实现:.GetMapping;导入org.springframework.web.bind。annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/***描述:参数分析解决方案TestController
*作者:IT学习道场
*时间:2022-11-169:25*/@Slf4j@RestController@RequestMapping("/currentUserResolver")publicclassCurrentUserResolverController{@GetMapping("/currentUserResolve")publicvoidcurrentUserResolve(@WlcUserCurrentUseruser){log.info("参数解析器注入CurrentUser={}",user.toString());}}请求下,控制台日志:参数解析自动注入成功!自己动手,丰衣足食,玩吧!