1. 概览
在这篇文章中,我们将仔细研究Spring Boot的异常 “Reason: Canonical names should be kebab-case (‘-‘ separated), lowercase alpha-numeric characters, and must start with a letter“。
首先,我们要阐明Spring Boot中出现这种错误的主要原因。然后,我们将通过一个实际的例子,深入探讨如何重现和解决这个问题。
2. 问题说明
首先,让我们了解一下这个错误信息的意思。 “Canonical names should be kebab-case” 简单地告诉我们,Canonical names(Canonical names指的是唯一标识一个属性的属性名)应该是 kebab case,也就是 短横线分隔命名法。
为了确保一致性,在 @ConfigurationProperties
注解的 prefix
参数中使用的命名惯例应该遵循 kebab case。
例如:
@ConfigurationProperties(prefix = "my-example")
在上面的代码片断中,prefix my-example
应该遵守 kebab case 的编码惯例。
3. Maven 依赖
由于这是一个基于Maven的项目,让我们在pom.xml中添加必要的依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
为了重现这个问题,spring-boot-starter 是唯一需要的依赖。
4. 重现该错误
4.1. Application Configuration
让我们来注册所需的组件:
@Configuration
@ConfigurationProperties(prefix = "customProperties")
public class MainConfiguration {
String name;
// getters and setters
}
然后,我们需要在 application.properties
文件中添加一个自定义属性:
custom-properties.name="Baeldung"
application.properties
位于 src/main/resources
下:
| pom.xml
+---src
| +---main
| | +---java
| | | \---com
| | | \---baeldung
| | | ...
| | | ...
| | \---resources
| | application.properties
现在,让我们在项目根目录下执行 mvn spring-boot:run
命令,运行我们的Spring Boot示例应用程序,看看会发生什么:
$ mvn spring-boot:run
...
...
***************************
APPLICATION FAILED TO START
***************************
Description:
Configuration property name 'customProperties' is not valid:
Invalid characters: 'P'
Bean: mainConfiguration
Reason: Canonical names should be kebab-case ('-' separated), lowercase alpha-numeric characters and must start with a letter
Action:
Modify 'customProperties' so that it conforms to the canonical names requirements.
如上所示,我们得到一条错误信息:Modify ‘customProperties’ so that it conforms to the canonical names requirements. ,这条错误信息表明,当前用于 customProperties
的命名规则不符合Spring设定的命名规则。换句话说,需要修改 customProperties
这个名字,以遵守Spring中对属性命名的要求。
5. 修复错误
我们需要将属性 prefix
从:
@ConfigurationProperties(prefix = "customProperties")
改成短横线分隔命名风格:
@ConfigurationProperties(prefix = "custom-properties")
6. Kebab Case 的优势
在访问这些属性时,使用 Kebab Case 的主要优势是,我们可以使用以下任何一种案例:
- camelCaseLikeThis
- PascalCaseLikeThis
- snake_case_like_this
- kebab-case-like-this
在 properties 文件中,使用 Kebab Case:
@ConfigurationProperties(prefix = "custom-properties")
将能够访问以下任何属性
customProperties.name="Baeldung"
CustomProperties.name="Baeldung"
custom_properties.name="Baeldung"
custom-properties.name="Baeldung"
7. 总结
在本教程中,我们了解到Spring Boot支持多种格式,包括属性名称中的驼峰、蛇形和短横线命名方式,但鼓励我们用短横线命名方式规范地访问它们,从而减少因命名规范不一致而导致错误或混淆的可能性。
Reference:https://www.baeldung.com/spring-boot-properties-canonical-form