1. 概述
在这个快速教程中,我们将深入研究Spring Boot中的错误信息:“Reason: Canonical names should be kebab-case (‘-’ 分割,小写字母数字字符,并且必须以字母开头)”。
首先,我们将揭示这个错误的根本原因,然后通过一个实际示例来探讨如何重现和解决它。
2. 问题陈述
首先,让我们理解错误消息的含义。“Canonical names should be kebab-case”简单地说,就是Canonical names(Canonical names指的是唯一标识属性的属性名称)应该采用kebab case命名风格。
为了保持一致性,@ConfigurationProperties
注解的prefix
参数应遵循kebab命名约定。
例如:
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. 应用配置
@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.
如上所示,我们收到一个错误消息:“修改'customProperties',使其符合canonical names的要求。”这个错误消息表明,当前用于customProperties
的命名约定不符合Spring设置的命名规范。换句话说,需要将customProperties
的名称更改为符合Spring中属性命名的要求。
5. 修复错误
我们需要将属性前缀从:
@ConfigurationProperties(prefix = "customProperties")
改为kebab case前缀:
@ConfigurationProperties(prefix = "custom-properties")
而在属性文件中,我们可以保留任何样式,这样就可以正常访问它们了。
6. Kebab Casing的优势
使用kebab case访问这些属性的主要优势是,我们可以使用以下任一命名风格:
- camelCaseLikeThis
- PascalCaseLikeThis
- snake_case_like_this
- kebab-case-like-this
在properties
文件中,然后使用kebab case形式进行访问。
@ConfigurationProperties(prefix = "custom-properties")
可以访问以下任一属性:
7. 总结
在这个教程中,我们了解到Spring Boot支持camel case、snake case和kebab case等多种属性名称格式,但鼓励我们按照kebab case进行统一访问,从而减少因命名不一致导致的错误或混淆的可能性。
如往常一样,本文的完整代码可在GitHub上找到。