簡體   English   中英

SpringBoot 2.6.3 未在對象列表上綁定 @ConfigurationProperties

[英]SpringBoot 2.6.3 not binding @ConfigurationProperties on List of Objects

我知道這一定很簡單,而且我已經看到多個類似的問題,但是我的整個設置似乎沒問題(在其他帖子中已解決),但這個問題仍然存在。

這是我的設置

環境

  • Spring 引導2.6.3
  • Java 17

應用.yml

platforms:
  configs:
    - platform: ABC
      base-url: https://some-url-01.com/api
      description:
      logo:
    - platform: DEF
      base-url: https://some-url-02.com/api
      description:
      logo:

配置屬性

@Data
@ConstructorBinding
@ConfigurationProperties(prefix = "platforms")
public class PlatformProperties {

    private final List<PlatformConfig> configs = new ArrayList<>();

    @Data
    public static class PlatformConfig {
        private final Platform platform;
        private final String baseUrl;
        private final String description;
        private final String logo;
    }
}

Platform.java - 一個簡單的枚舉

public enum Platform {
    ABC, DEF
}

配置

@Slf4j
@Configuration
@RequiredArgsConstructor
@EnableConfigurationProperties(PlatformProperties.class)
public class ClientConfig {

    private final PlatformProperties platformProperties;

    
    @PostConstruct
    public void showProperties(){
        platformProperties.getConfigs().forEach(System.out::println);
    }
}

整個設置看起來非常好(參考: Spring Docs ),但是platformProperties.getConfigs()總是空的,因為在application.yml中定義的platforms.configs上沒有綁定

我在另一個項目 ( springboot 2.5.7 / Java 8 ) 上有類似的設置,一切都按預期工作。

這個設置/配置有什么問題???

嗯,我早就解決了這個問題,只是想提供答案,而且也很簡單。

你看到這條線了嗎?

private final List<PlatformConfig> configs = new ArrayList<>();

那是罪魁禍首。

請注意, configs變量是最終變量,並且已經為其值分配了一個new ArrayList<>() ,因此它是不可變的。

解決方案是刪除初始分配,因此該行變為;

private final List<PlatformConfig> configs;

構造函數綁定正常, configs值按預期填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM