java - 如何在 Spring @Value 中注入(inject)非原始对象列表

标签 java spring spring-boot yaml

嗨 Spring/SpringBoot/Yaml/Java 专家,我想在 @Value 中注入(inject)属于类 Perm 的值列表

但是,Spring 无法启动我的应用程序并抛出如下错误:

注入(inject) Autowiring 依赖项失败;嵌套异常是 java.lang.IllegalArgumentException:无法解析值“${myservice.api.perms}”中的占位符“myservice.api.perms”

我是 Spring、Spring Boot 和 Yaml 的新手,请您帮助我

# application.yaml file

myservice:
  api:
    perms:
      -
        name: xyz
        guid: abc
        index: 0
// Class file that wants to read a List<Perm> from the application.yaml file

@Slf4j
@Getter
@Service
@Accessors(fluent = true)
public class MyService {

    @Value("${myservice.api.perms}")
    private List<Perm> perms;

    public List<Perm> getListOfPerms() {
        return perms;
    }

    @Getter
    @Setter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Perm {

        @NotBlank
        private String name;

        @NotBlank
        private String guid;

        private int index;
    }
}

最佳答案

您应该使用@ConfigurationProperties在这种情况下!

@Configuration
@ConfigurationProperties("myservice.api")
@Getter
@Setter
@Validated
public class ApiProperties {

    @NestedConfigurationProperty
    @NotEmpty
    private List<@Valid Perm> perms;

    @Getter
    @Setter
    public static class Perm {

        @NotBlank
        private String name;

        @NotBlank
        private String guid;

        @NotNull
        @Positive
        private Integer index;

    }

}

更多资源:

关于java - 如何在 Spring @Value 中注入(inject)非原始对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75392363/

相关文章:

java - 即使在 pom.xml 中定义,也无法导入 keycloak

java - 无法 gpg 解密 BouncyCaSTLePGP 加密消息

java - Apache POI 性能

java - spring mvc表单提交异常处理模式

java - Spring:如何将 String bean 注入(inject)构造函数?

java - 无法从 PMD 中排除某些规则

java - QueryFilter 未按预期工作

java - JPA 和泛型,为什么我的类(class)不起作用?

spring-boot - 无法启动嵌入式 Tomcat - Spring Boot

java - Swagger 参数文档