一、前言 在使用springweb的时候,我们获取HttpServletRequest中的数据时候通常会会用到HeaderRequestParamRequestBody等注解获取值,并注入到对应的变量中。那么这个到底是怎么实现呢?二、参数解析器的基本使用2。1创建注解,为参数打上标记importjava。lang。annotation。ElementType;importjava。lang。annotation。Retention;importjava。lang。annotation。RetentionPolicy;importjava。lang。annotation。Target;定义一个注解标志Target(ElementType。PARAMETER)Retention(RetentionPolicy。RUNTIME)publicinterfaceCurrentUser{}2。2创建参数解析器importcom。ztq。anno。CurrentUser;importcom。ztq。vo。User;importlombok。extern。slf4j。Slf4j;importorg。springframework。core。MethodParameter;importorg。springframework。web。bind。support。WebDataBinderFactory;importorg。springframework。web。context。request。NativeWebRequest;importorg。springframework。web。method。support。HandlerMethodArgumentResolver;importorg。springframework。web。method。support。ModelAndViewContainer;importjava。util。Objects;Slf4jpublicclassCurrentUserMethodArgumentResolverimplementsHandlerMethodArgumentResolver{OverridepublicbooleansupportsParameter(MethodParameterparameter){if(parameter。getParameterType()。equals(User。class)parameter。hasParameterAnnotation(CurrentUser。class)){returntrue;}returnfalse;}OverridepublicObjectresolveArgument(MethodParameterparameter,ModelAndViewContainermavContainer,NativeWebRequestwebRequest,WebDataBinderFactorybinderFactory)throwsException{StringnamewebRequest。getParameter(name);UserusernewUser();user。setUserName(Objects。isNull(name)?test1:name);user。setPassword(password);returnuser;}}2。3创建配置类,添加参数解析器importcom。ztq。resolver。CurrentUserMethodArgumentResolver;importorg。springframework。context。annotation。Configuration;importorg。springframework。web。method。support。HandlerMethodArgumentResolver;importorg。springframework。web。servlet。config。annotation。WebMvcConfigurer;importjava。util。List;ConfigurationpublicclassMvcConfigimplementsWebMvcConfigurer{OverridepublicvoidaddArgumentResolvers(ListHandlerMethodArgumentResolverresolvers){resolvers。add(newCurrentUserMethodArgumentResolver());}}2。4测试importcom。ztq。anno。CurrentUser;importcom。ztq。vo。User;importorg。springframework。web。bind。annotation。GetMapping;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。RestController;RestControllerRequestMapping(user)publicclassArgsController{GetMappingpublicUsergetUserInfo(CurrentUserUseruser){returnuser;}}三、总结 在实际应用中,我们可以根据HandlerMethodArgumentResolver接口中第二个方法,传递过来的参数webRequestModelAndView等结合其他的辅助类完成更加复杂的数据类型的注入。