前提:
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 {
@Override
public boolean supportsParameter(MethodParameter parameter) {
Token token = parameter.getParameterAnnotation(Token.class);
return token != null;
}
@Override
public 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 {
@Override
public 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;
}
}