Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ConfigurationProperties将属性名称与yaml文件中的数字绑定_Java_Spring_Spring Boot_Yaml - Fatal编程技术网

Java ConfigurationProperties将属性名称与yaml文件中的数字绑定

Java ConfigurationProperties将属性名称与yaml文件中的数字绑定,java,spring,spring-boot,yaml,Java,Spring,Spring Boot,Yaml,我是Spring Boot新手,在将application.yml文件中的属性值绑定到用@configurationproperties注释的类时遇到问题 在application.yml中: aaa: what-1word-is: true 在@ConfigurationProperties注释类中: @Data @Configuration @ConfigurationProperties(prefix = "aaa") public class Test { private

我是Spring Boot新手,在将application.yml文件中的属性值绑定到用
@configurationproperties
注释的类时遇到问题

在application.yml中:

aaa:
  what-1word-is: true
@ConfigurationProperties
注释类中:

@Data
@Configuration
@ConfigurationProperties(prefix = "aaa")
public class Test
{
    private boolean what1WordIs;
}
我试过用不同的名字来命名, 但它们都不起作用;
what1words
总是
false
。 我试过的名字,
what-1-word-is
what-1word-is
什么是单词
what-1Word-is
。 只有
what1WordIs
起作用(将配置类中的
what1WordIs
设置为
true


Spring能够在属性名称中绑定一个数字吗?

我将提出一些不同于was的问题。我可能建议不允许在属性文件中使用数字

如果可能,您可以尝试将属性名称设置为如下所示:

aaa:
哪个单词是

或者再短一点:

aaa:
单个单词


免责声明 这不是你想要的答案, 但这可能是问题的解决办法

关于我的一切
我不喜欢
@ConfigurationProperties
绑定技术 (您正在使用的)。 为了我, 它似乎“太神奇了”。 相反 我更喜欢在每个属性上使用
@Value
注释

试试看
尝试在
what1WordIs
字段上使用以下注释:

@Value("${aaa.what-1word-is}")
private boolean what1WordIs;
它应该会起作用。 我已经试过了,它对我有效。即使是“一个字是什么”

application.yml

aaa:
  what-1-word-is: true
Config.class

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
@ConfigurationProperties(prefix = "aaa")
@Data
public class Config {
  private boolean what1WordIs;

  @PostConstruct
  public void init(){
      System.out.println("CONFIG :: "+this);
  }
}
因此,我们可以看到:

CONFIG :: Config(what1WordIs=true)
我认为您面临这个问题是因为您使用了@Configuration注释而不是@Component

顺便说一句:Spring允许我们在配置文件中使用不同的属性名。我已经试过了你提到的所有方法,效果很好。(更多:)

BTW2:如果您想查看Spring希望您将哪些属性添加到依赖项中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
此外,IDE将能够为您自动完成:)

BTW3:请检查,您是否使用Lombok库中的@Data


我希望它仍然是实际的:)

正如@Alexander Polozov回答中提到的,实际的属性名称(因为您使用的是YAML配置)是
aaa。what-1-word-is
。前缀很重要。谢谢你的建议。我忘了在问题中添加
prefix=“aaa”
,但我在codeThx中确实有建议!我用其他字符替换了数字,它仍然有效。可能需要进一步挖掘它实际上是如何工作的,对
spring配置元数据的引用。json
(以及如何获得它:-p)是一个救命恩人!:-)
{
  "groups": [
    {
      "name": "aaa",
      "type": "com.supra89kren.test_spring.configurtion.Config",
      "sourceType": "com.supra89kren.test_spring.configurtion.Config"
    }
  ],
  "properties": [
    {
      "name": "aaa.what1-word-is",
      "type": "java.lang.Boolean",
      "sourceType": "com.supra89kren.test_spring.configurtion.Config",
      "defaultValue": false
    }
  ],
  "hints": []
}