问答

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

作者:admin 2021-06-07 我要评论

求解答,如何从controller中的入参获取注解所需要的值,例子如下: 我的log注解接口参数中有两个方法,需要获取到从controller中穿过来的deviceID和DeviceType这...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

求解答,如何从controller中的入参获取注解所需要的值,例子如下:
image.png
image.png
我的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);

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

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • PHP-fpm怎么实现进程间同步与互斥的?

    PHP-fpm怎么实现进程间同步与互斥的?

  • ts类型问题

    ts类型问题

  • js不带引号的对象格式字符串怎么转为对

    js不带引号的对象格式字符串怎么转为对

  • Number.prototype.toFixed() 四舍五入

    Number.prototype.toFixed() 四舍五入

腾讯云代理商
海外云服务器