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使用元注释并创建我自己的注释的能力。这也实现了“在一个地方改变它”的目标。对不起,这没有任何意义。但它并没有回答这个问题。