Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 如何使用常量输入多个@CrossOrigins?_Java_Spring_Spring Mvc_Cors_Spring Annotations - Fatal编程技术网

Java 如何使用常量输入多个@CrossOrigins?

Java 如何使用常量输入多个@CrossOrigins?,java,spring,spring-mvc,cors,spring-annotations,Java,Spring,Spring Mvc,Cors,Spring Annotations,我在几个控制器上有一个@CrossOrigin注释。我希望能够在某个地方设置一个静态final,并让所有人都引用它。比如: public static final String[] ORIGINS = {"domain1","domain2"}; ... @CrossOrigin(origins = ORIGINS) 然而,我显然有一些语法错误 解决方案 对于那些有兴趣做同样事情的人,以下是我所做的: @Target({ElementType.FIELD, ElementType.PARAME

我在几个控制器上有一个
@CrossOrigin
注释。我希望能够在某个地方设置一个
静态final
,并让所有人都引用它。比如:

public static final String[] ORIGINS = {"domain1","domain2"};
...
@CrossOrigin(origins = ORIGINS)
然而,我显然有一些语法错误

解决方案 对于那些有兴趣做同样事情的人,以下是我所做的:

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@CrossOrigin(origins = {
        "domain1",
        "domain2"
})
@Controller
@interface CORSPermittedController {
}

这允许我用
@CORSPermittedController
注释我的所有控制器。不幸的是,用Java语法无法做到这一点。属性值必须是编译常量(原语、
String
literals或这些类型的数组)


但是您可以编写一个bean后处理器,它负责在运行时使用公共静态最终字符串[]ORIGINS={“DOMAIN1”、“DOMAIN2},将此注释放到类上

试试看,常量应该大写。它们之所以是常量,是因为您将它们声明为final。因此,它们必须资本化

如果这不起作用,试试看


公共静态最终字符串[]ORIGINS={“DOMAINONE”,“DOMAINTWO”}

创建常量的另一种方法是


公共枚举源{DOMAIN1,DOMAIN2}

对!那是我错过的部分。实际上,与使用
javassist
相比,更好的方法是使用Spring使用元注释并创建我自己的注释的能力。这也实现了“在一个地方改变它”的目标。对不起,这没有任何意义。但它并没有回答这个问题。