Spring Boot 当使用带有camelCase前缀的ConfigurationProperties时,如何解决“Prefix must be in canonical form”问题?

0s0u357o  于 2023-04-30  发布在  Spring
关注(0)|答案(2)|浏览(254)

我在yml中配置了一个属性

foobar:
  baz: 7

以及一个配置类,

@ConfigurationProperties(prefix = "foobar")

一切正常
我的组织中的代码通常是camelCase,因此我将属性和前缀都重命名为fooBar。IntelliJ现在突出显示prefix = "foobar"行,并显示错误“Prefix must be in canonical form”。在yml配置中保留camelCasing的同时,我能做什么?

vh0rcniy

vh0rcniy1#

Sping Boot 支持多种格式的属性名称,但鼓励您以规范的方式访问它们。
根据Property Binding in Spring Boot 2.0
结果表明,如果您将其限制在一个方向上,那么放松属性名称的想法更容易实现。应始终使用规范形式访问代码中的属性,而不管它们在基础源代码中的表示方式。
ConfigurationPropertyName类强制执行这些规范的命名规则,基本上可以归结为“使用小写的kebab-case名称”。
因此,例如,您应该将代码中的属性称为person。名字即使是人。firstName或PERSON_FIRSTNAME在基础源中使用。
您可以使用camel case来保存配置yml:

fooBar:
  baz: 7

但将配置类注解中的访问更改为使用kebab-case:

@ConfigurationProperties(prefix = "foo-bar")
rslzwgfq

rslzwgfq2#

规范名称应该是kebab-case错误是什么意思?

简短回答:它只是意味着规范名称(* 唯一标识属性的属性名称 *)应该是kebab案例。
这意味着 prefix 中遵循的命名约定应该强制使用kebab大小写。

@ConfigurationProperties(prefix = "..")

示例:

@ConfigurationProperties(prefix = "profile.application-properties")
public record Configuration(String name) {
}

然后,我们需要向www. example添加一个自定义属性(名称) www.example.com 文件如下:

profile.properties.name="XYZ"

烤肉串肠衣的优势

我们有四种类型的套管可供选择,即:

  • Camel 套管
  • PascalCasing
  • 蛇形套管
  • 烤肉串肠衣

我们可以在属性文件中使用这些样式中的任何一种,而在访问它们时,我们只需要遵循kebab大小写即可。
例如,通过

@ConfigurationProperties(prefix = "profile-properties")

我们可以访问camelCasing

profile.applicationProperties.name="XYZ"

PascalCasing

profile.ApplicationProperties.name="XYZ"

snake_casing

profile.application_properties.name="XYZ"

或者烤肉串肠衣

profile.application-properties.name="XYZ"

相关问题