求解答,如何从controller中的入参获取注解所需要的值,例子如下:
我的log注解接口参数中有两个方法,需要获取到从controller中穿过来的deviceID和DeviceType这两个值,现在注解中取不到这两个入参值,我应该怎么做?求解
AOP的JoinPoint.getArgs()
本来就可以获取到啊,不需要自定义注解
el表达式
凑字数凑字数
注解
@Retention(RUNTIME)
@Target({ METHOD })
public @interface TestParam {
String a() default "";
String b() default "";
}
配置类
@Configuration
public class TestConfiguration {
@Bean
public WebMvcConfigurer customAnnoArgsResolver() {
return new WebMvcConfigurer() {
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new HandlerMethodArgumentResolver() {
@Override
public boolean supportsParameter(MethodParameter parameter) {
Method method = (Method) parameter.getExecutable();
return method.getAnnotation(TestParam.class) != null
&& Stream.of(TestParam.class.getDeclaredMethods()).map(m -> m.getName())
.collect(Collectors.toList()).contains(parameter.getParameterName());
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
TestParam tp = parameter.getMethod().getAnnotation(TestParam.class);
Method f = TestParam.class.getDeclaredMethod(parameter.getParameterName());
f.setAccessible(true);
return f.invoke(tp);
}
});
}
};
}
}
测试
@GetMapping("/1")
@TestParam(a = "111", b = "222")
public void test1(String a, String b, @RequestParam String c) {
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
实现是帮你实现了,但是这种东西真心觉得意义不大