Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以对方法参数应用手动实例化的Java注释?_Java_Azure Functions_Java Annotations - Fatal编程技术网

是否可以对方法参数应用手动实例化的Java注释?

是否可以对方法参数应用手动实例化的Java注释?,java,azure-functions,java-annotations,Java,Azure Functions,Java Annotations,在以下主题中: 讨论了如何创建Java注释的实例 package com.microsoft.azure.functions.annotation; import com.microsoft.azure.functions.HttpMethod; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPoli

在以下主题中:

讨论了如何创建Java注释的实例

package com.microsoft.azure.functions.annotation;

import com.microsoft.azure.functions.HttpMethod;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface HttpTrigger {
    String name();

    String dataType() default "";

    String route() default "";

    HttpMethod[] methods() default {};

    AuthorizationLevel authLevel() default AuthorizationLevel.FUNCTION;
}
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface CreateHttpTrigger {
    String name() default "req";

    String dataType() default "";

    String route() default "/api/mypath";

    HttpMethod[] methods() default {};

    AuthorizationLevel authLevel() default AuthorizationLevel.ANONYMOUS;
}
我的问题是:有这样一个注释实例,我能用它做什么?特别是,我可以在方法的参数上应用它吗

动机:

我正在准备几个Azure函数,我不喜欢这样的事实,我需要像代码一样重复很多次

所以我想我应该创建一个方法
HttpTrigger createHttpTrigger(HttpMethod-HttpMethod){…}
,然后代替

@FunctionName(“MyFunction”)
公共HttpResponseMessageGetModelNames(
@HttpTrigger(name=“req”,methods={HttpMethod.GET},route=“api/mypath”,authLevel=AuthorizationLevel.ANONYMOUS)HttpRequestMessage请求,
最终执行(上下文){
...
}
写一些像

@FunctionName(“MyFunction”)
公共HttpResponseMessageGetModelNames(
@createHttpTrigger(HttpMethod.GET)HttpRequestMessage请求,
最终执行(上下文){
}

(当然,这段代码是不正确的)

我查看了HttpTrigger源代码,发现我只需要向注释的属性添加一些默认值

package com.microsoft.azure.functions.annotation;

import com.microsoft.azure.functions.HttpMethod;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface HttpTrigger {
    String name();

    String dataType() default "";

    String route() default "";

    HttpMethod[] methods() default {};

    AuthorizationLevel authLevel() default AuthorizationLevel.FUNCTION;
}
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface CreateHttpTrigger {
    String name() default "req";

    String dataType() default "";

    String route() default "/api/mypath";

    HttpMethod[] methods() default {};

    AuthorizationLevel authLevel() default AuthorizationLevel.ANONYMOUS;
}
创建新注释

package com.microsoft.azure.functions.annotation;

import com.microsoft.azure.functions.HttpMethod;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface HttpTrigger {
    String name();

    String dataType() default "";

    String route() default "";

    HttpMethod[] methods() default {};

    AuthorizationLevel authLevel() default AuthorizationLevel.FUNCTION;
}
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface CreateHttpTrigger {
    String name() default "req";

    String dataType() default "";

    String route() default "/api/mypath";

    HttpMethod[] methods() default {};

    AuthorizationLevel authLevel() default AuthorizationLevel.ANONYMOUS;
}
代码可以这样重写

    @FunctionName("HttpTrigger-Java")
    public HttpResponseMessage run(
            @CreateHttpTrigger(methods = {HttpMethod.GET}) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
@FunctionName(“HttpTrigger Java”)
公共HttpResponseMessage运行(
@CreateHttpTrigger(methods={HttpMethod.GET})HttpRequestMessage请求,
最终执行(上下文){
但当我运行它时,它会显示以下错误消息:

“HttpTrigger Java”函数出错:必须至少声明一个绑定

我尝试了几种方法,但都没有成功运行,所以我检查了官方的绑定和触发

从上表中,我推断自定义
CreateHttpTrigger
注释是Azure函数不支持的绑定


总之,我想你的想法无法实现。如果你有更好的想法,你可以告诉我。我愿意继续讨论这个问题。

如果你正在编写自定义注释,那么你可以使用反射api扫描并相应地修改你的api/实现。我能够实现一些我有某种需求的用例。这可以帮助