调用 REST API 的自定义 Java 注释
Custom Java annotation that calls a REST API
我想创建一个 Java 注释 @Ping
,它向我部署在 Docker 容器中的 REST API 发送 POST
请求.
到目前为止,我创建了这个注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Ping {
String endpoint();
}
如您所见,我希望此注释基于方法。此方法将允许我为我的其他服务提供状态(可用或不可用)。
我还想将此代码作为 Maven 工件存储在我自己的存储库中,我将在其中添加更多注释,以便我可以在我的其他服务中使用它。
我看过几个教程,但无法弄清楚如何将这种行为具体化,而且我一开始也无法让它发挥作用。
据我了解,现在我需要一个包含逻辑的处理程序(即向我的 API 发送 POST
请求),但我不确定该怎么做。
你有机会帮助我开始吗?注释是做这样的事情的好主意吗?
谢谢!
创建方法级注解并使用 AOP 编写将调用您的其余部分的逻辑 api
@Around("execution(@Ping * *(..))")
public void entr(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("before method");
joinPoint.proceed();
System.out.println("after method");
}
为了添加到@Urvil Joshi 的回答中,考虑到我不想添加 Spring 依赖项,我创建了一个包含以下内容的 PingAspect.aj
文件:
public aspect PingAspect {
pointcut hasPingAnnotation(Ping ping): @annotation(ping);
pointcut execute() : execution(* * (..));
Object around(Ping ping) : execute() && hasPingAnnotation(ping) {
System.out.println("Before method execution");
String endpoint = ping.endpoint();
System.out.println("Endpoint = " + endpoint);
Object result = proceed(ping);
System.out.println("After");
return result;
}
}
与 ajc 编译器完美配合!
希望能帮到你
我想创建一个 Java 注释 @Ping
,它向我部署在 Docker 容器中的 REST API 发送 POST
请求.
到目前为止,我创建了这个注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Ping {
String endpoint();
}
如您所见,我希望此注释基于方法。此方法将允许我为我的其他服务提供状态(可用或不可用)。
我还想将此代码作为 Maven 工件存储在我自己的存储库中,我将在其中添加更多注释,以便我可以在我的其他服务中使用它。
我看过几个教程,但无法弄清楚如何将这种行为具体化,而且我一开始也无法让它发挥作用。
据我了解,现在我需要一个包含逻辑的处理程序(即向我的 API 发送 POST
请求),但我不确定该怎么做。
你有机会帮助我开始吗?注释是做这样的事情的好主意吗?
谢谢!
创建方法级注解并使用 AOP 编写将调用您的其余部分的逻辑 api
@Around("execution(@Ping * *(..))")
public void entr(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("before method");
joinPoint.proceed();
System.out.println("after method");
}
为了添加到@Urvil Joshi 的回答中,考虑到我不想添加 Spring 依赖项,我创建了一个包含以下内容的 PingAspect.aj
文件:
public aspect PingAspect {
pointcut hasPingAnnotation(Ping ping): @annotation(ping);
pointcut execute() : execution(* * (..));
Object around(Ping ping) : execute() && hasPingAnnotation(ping) {
System.out.println("Before method execution");
String endpoint = ping.endpoint();
System.out.println("Endpoint = " + endpoint);
Object result = proceed(ping);
System.out.println("After");
return result;
}
}
与 ajc 编译器完美配合! 希望能帮到你