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上找到。