【问题标题】:How to make a Rest API call inside a custom annotation?如何在自定义注释中进行 Rest API 调用?
【发布时间】:2020-09-30 17:38:18
【问题描述】:

我想进行一个 REST API 调用,它返回一个布尔值作为自定义注释的一部分。

示例代码:

**@CustomAnnotation
public String myMethod(){
 // my implementation
}**

仅当来自 REST 调用的布尔值为 true 时,方法“myMethod”必须被触发并且应该发生实现,否则会抛出类似于 @NotNull 的异常。 我想知道这是否可能,如果可以,请有人帮助我。

【问题讨论】:

  • 注解的任何特定目的,你也可以把它做成返回true或false的简单方法

标签: java rest annotations


【解决方案1】:

您可以创建一个简单的自定义注解,而无需担心调用 rest 的代码。 用于执行休息调用代码 ->

了解如何应用面向方面的编程。

基本上使用 aop(面向apsect 的编程),您可以编写代码,以便对于使用自定义注释进行注释的任何方法,您希望在调用您的方法之前执行一些代码。

在春天做这个

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface CustomAnnotation {
    String value() default "";
}

@Pointcut(value = "@annotation(CustomAnnotation)")  // full path to CustomAnnotation class
public void abc() {
}

@Around("abc()")
public Object executeSomePieceOfCode(ProceedingJoinPoint joinPoint) throws Throwable {

        System.out.println("this executes before calling method");

        // YOUR CODE TO CALL REST API
        boolean responseFromRestCall = true;  // this flag is set based on response from rest call

        if(responseFromRestCall) {
            // this excutes your method
            Object obj = joinPoint.proceed();
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            Method method = signature.getMethod();

            CustomAnnotation myAnnotation = method.getAnnotation(CustomAnnotation.class);
            String value = myAnnotation.value();
            System.out.println("value : + " + value);
            return obj;
        } else {
            // currently throwing RuntimeException. You can throw any other custom exception.
            throw new RuntimeException();
        }

}

【讨论】:

  • 感谢您的帮助。这是我的自定义注释代码: *** @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Custom { AnnotationValue value(); } *** 其中“AnnotationValue”是为我的实现定义的枚举。现在如何将 value() 变量中传递的参数获取到我的 AOP 的 REST 调用代码中
  • 虽然这个答案是正确的,但在我的answer 另一个问题中可以找到获取注释详细信息的更好方法。 @SahilGarg 您可以修改答案以避免反射
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 2011-10-08
  • 2020-09-10
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
相关资源
最近更新 更多