自定义参数解析
- ① 自定义注解
- ②自定义参数解析器
- ③实现Springboot的自动装配接口
- ④将自定义注解添加到参数上
前提:
springboot
项目是必须的,因为需要用到自动装配
① 自定义注解
@Target(ElementType.PARAMETER) // 代表 加在 方法的参数上 (@Token String token)
@Retention(RetentionPolicy.RUNTIME) // 注解在运行期有效
public @interface Token {String value() default "123";
}
②自定义参数解析器
supportsParameter
这个方法代表对某注解能不能支持解析,返回true
,代表支持resolveArgument
这个方法代表解析支持的注解后,返回给参数的值
public class TokenArgumentResolver implements HandlerMethodArgumentResolver {@Overridepublic boolean supportsParameter(MethodParameter parameter) {Token token = parameter.getParameterAnnotation(Token.class);return token != null;}@Overridepublic Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {return webRequest.getHeader("token");}
}
③实现Springboot的自动装配接口
实现WebMvcConfigurer
接口,并实现addArgumentResolvers
方法,就可以让spring自动对自定义的参数解析器进行装配了,只有装配好了,才能让spring认识这是一个参数解析器,才能对参数进行解析。
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(new TokenArgumentResolver());}
}
④将自定义注解添加到参数上
@RestController
@RequestMapping("/test")
public class AnnotationController {@GetMapping("/param")public String getParam(@Token String path) {return path;}
}