注释属性的值必须是常量表达式

发布于 2024-12-12 20:19:47 字数 331 浏览 2 评论 0原文

我有一个属性文件,在获取平台参数后,我通过 spring 注释读取该文件

    @Value("${platform}")
    private String platform;

,我想根据 platform 参数值读取第二个参数。

    @Value("${url." + platform + ."ws}")
    private String url;

但这会产生错误,“注释属性的值必须是常量表达式”。 由于根据“平台”值有很多参数变化,我正在寻找一个通用的解决方案。

I have a properties file that I read by spring annotation like this

    @Value("${platform}")
    private String platform;

after I get the platform parameter, I would like to read a second parameter depending on platform parameter value.

    @Value("${url." + platform + ."ws}")
    private String url;

but this gives error, "value for the annotation attribute must be constant expression".
since there are lots of parameter changes depending on "platform" value, I am looking for a generic solution.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空名 2024-12-19 20:19:47

您无法直接在 @Value 表达式中访问 platform,但您可以使用 Spring 表达式语言来实现您的最终目标。

@Value("${platform}")
private String platform;

@Value("#{'Url.'.concat(${platform}).concat('.ws')}")
private String url;

You can't access platform directly in the @Value expression, but you can use Spring Expression Language to accomplish your end goal.

@Value("${platform}")
private String platform;

@Value("#{'Url.'.concat(${platform}).concat('.ws')}")
private String url;
不奢求什么 2024-12-19 20:19:47

该参数在编译时评估。因此它需要是 finalstatic final 等(即 Enum)。

我不知道 @Value 注释是否允许这样做。但您始终可以实现自己的注释。 Java 注释中无法进行扩展。

The parameter is evaluated in compilation time. So it needs to be final or static final among others (ie Enum).

I don't know if the @Value annotation allows that. But you can always implement your own annotation. Extending is not possible in Java annotations.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文