gpt4 book ai didi

java - Play Framework 2.5.12 - 从调用中获取方法

转载 作者:行者123 更新时间:2023-12-01 08:49:13 24 4
gpt4 key购买 nike

我需要获取从 play.api.mvc.Call 实例调用的方法。我已经注意到我的 Controller 的方法并使用反向路由我需要检查这些注释。

我使用的是 Play Framework 2.5.12

示例:

注释:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyAnnotation{
}

Controller :

public class MyController extends Controller {

@MyAnnotation
public Result home(int index){
return ok(index);
}
}

类(class):

public class MyClass{

private Call call;

public MyClass(Call call){
this.call = call;
}

public boolean hasAnnotation(){
//TODO
return call.getControllerMethod().isAnnotationPresent(MyAnnotation.class);
}
}

用途:

MyClass obj = new MyClass(routes.MyController.home(1));
if(obj.hasAnnotation()){
//do something
}

显然 call.getControllerMethod() 不存在,但我需要一些解决方案来从 URL 或调用实例获取 Controller 的方法。

感谢您的支持。

最佳答案

OP 的解决方案。

不幸的是,我决定创建一个像这样的调用包装器:

public class CallRef extends Call {

private Class<? extends Controller> controllerClass;
private Method controllerMethod;

public CallRef(Call call, Class<? extends Controller> controllerClass,
String controllerMethodName, Class<?>... methodArgs) throws NoSuchMethodException {

this(call, controllerClass, controllerClass.getMethod(controllerMethodName, methodArgs));
}

public CallRef(Call call, Class<? extends Controller> controllerClass, Method controllerMethod) {
this(call.method(), call.url(), call.fragment(), controllerClass, controllerMethod);
}

public CallRef(String method, String url, String fragment, Class<? extends Controller> controllerClass, Method controllerMethod) {
super(method, url, fragment);
this.controllerClass = controllerClass;
this.controllerMethod = controllerMethod;
}

public CallRef(CallRef callRef){
this(callRef, callRef.getControllerClass(), callRef.getControllerMethod());
}

public Class<? extends Controller> getControllerClass() {
return controllerClass;
}

public Method getControllerMethod() {
return controllerMethod;
}
}

因此,我需要在类 CallRef 上手动创建实例,指定 Controller 、方法和参数。

关于java - Play Framework 2.5.12 - 从调用中获取方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42488711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com