怎样从controller中的入参获取注解所需要的值?

求解答,如何从controller中的入参获取注解所需要的值,例子如下:
image.png
image.png
我的log注解接口参数中有两个方法,需要获取到从controller中穿过来的deviceID和DeviceType这两个值,现在注解中取不到这两个入参值,我应该怎么做?求解

阅读 5.1k
3 个回答

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);

}
实现是帮你实现了,但是这种东西真心觉得意义不大

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题