Spring Boot属性前缀必须是规范形式

2023/06/01

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”只是告诉我们规范名称(规范名称是指唯一标识一个属性的属性名)应该是kebab大小写。

为保证一致性,@ConfigurationProperties注解的prefix参数中使用的命名约定应遵循kebab大小写。

例如:

@ConfigurationProperties(prefix = "my-example")

在上面的代码片段中,前缀my-example应该遵守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 应用程序配置

如果您不熟悉配置属性,可以通过阅读Spring Boot中的@ConfigurationProperties指南来更好地理解。

让我们注册所需的组件:

@Configuration
@ConfigurationProperties(prefix = "customProperties")
public class MainConfiguration {
    String name;

    // getters and setters
}

然后,我们需要在application.properties文件中添加一个自定义属性:

custom-properties.name="Tuyucheng"

application.properties位于src/main/resources下:

|   pom.xml
+---src
|   +---main
|   |   +---java
|   |   |   \---cn
|   |   |       \---tuyucheng
|   |   |           \---taketoday
|   |   |               ...
|   |   |               ...
|   |   \---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. 修复错误

我们需要更改属性前缀:

@ConfigurationProperties(prefix = "customProperties")

到kebab大小写前缀:

@ConfigurationProperties(prefix = "custom-properties")

在属性中,我们可以保留任何样式,并且我们可以很好地访问它们。

6. Kebab大小写的优势

在访问这些属性时使用kebab大小写的主要优点是我们可以使用以下任何形式:

  • camelCaseLikeThis
  • PascalCaseLikeThis
  • snake_case_like_this
  • kebab-case-like-this

在属性文件中并使用kebab大小写访问它们。

@ConfigurationProperties(prefix = "custom-properties")

将能够访问以下任何属性:

customProperties.name="Tuyucheng"
CustomProperties.name="Tuyucheng"
custom_properties.name="Tuyucheng"
custom-properties.name="Tuyucheng"

7. 总结

在本教程中,我们了解到Spring Boot支持多种格式,包括属性名称中的驼峰式、蛇形大小写和kebab大小写,但鼓励我们以kebab式大小写规范地访问它们,从而减少因命名约定不一致而导致错误或混淆的可能性。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章