簡體   English   中英

Spring Boot從application.yml注入Map時不包含特殊字符

[英]Spring Boot doesn't include special characters while injecting Map from application.yml

我有一個簡單的Spring Boot項目,旨在從application.yml讀取和轉換數據並將其轉換為Java Map<String,String> 在項目的業務層中,我需要使用電子郵件地址作為鍵來填充該地圖。 問題從這里開始。 Spring(或Spring Boot)無法按我的要求工作。 它在鍵端完全忽略@字符,但在值端正常工作。

以下是一些代碼:

應用程序

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Bootstrap.java

@Slf4j
@Component
@ConfigurationProperties(prefix = "foo-filter")
public class Bootstrap implements CommandLineRunner {

    @Setter
    private Map<String, String> barFilters;

    @Setter
    private Map<String, String> bazFilters;

    @Override
    public void run(String... args) {
        barFilters.forEach((key, value) -> log.info(key + " -> " + value));

        bazFilters.forEach((key, value) -> log.info(key + " -> " + value));
    }
}

application.yml

foo-filter:
  bar-filters:
    filtered1@mail.com: all
    filtered2@mail.com: all
    filtered3@mail.com: some
    filtered4@mail.com: none

  baz-filters:
    filtered1: all@mail.com
    filtered2: none@mail.com

最后,這是控制台輸出:

filtered1mail.com -> all
filtered2mail.com -> all
filtered3mail.com -> some
filtered4mail.com -> none
filtered1 -> all@mail.com
filtered2 -> none@mail.com

第一個Map( barFilters )鍵不包含@字符。 我嘗試過的另一件事:

->在兩邊加上雙引號( " )。

->使用帶轉義符( \\@ )的\\@

->使用等效於@( U+0040 )的Unicode。

->使用等效於@( \@ )的轉義序列。

->使用等效於@( &#64; )的HTML代碼。

他們都沒有工作。

為什么會發生這種情況,我該如何解決呢? 這是錯誤還是功能?

我有一個簡單的Spring Boot項目,旨在從application.yml讀取和轉換數據並將其轉換為Java Map<String,String> 在項目的業務層中,我需要使用電子郵件地址作為鍵來填充該地圖。 問題從這里開始。 Spring(或Spring Boot)無法按我的要求工作。 它在鍵端完全忽略@字符,但在值端正常工作。

以下是一些代碼:

應用程序

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Bootstrap.java

@Slf4j
@Component
@ConfigurationProperties(prefix = "foo-filter")
public class Bootstrap implements CommandLineRunner {

    @Setter
    private Map<String, String> barFilters;

    @Setter
    private Map<String, String> bazFilters;

    @Override
    public void run(String... args) {
        barFilters.forEach((key, value) -> log.info(key + " -> " + value));

        bazFilters.forEach((key, value) -> log.info(key + " -> " + value));
    }
}

application.yml

foo-filter:
  bar-filters:
    filtered1@mail.com: all
    filtered2@mail.com: all
    filtered3@mail.com: some
    filtered4@mail.com: none

  baz-filters:
    filtered1: all@mail.com
    filtered2: none@mail.com

最后,這是控制台輸出:

filtered1mail.com -> all
filtered2mail.com -> all
filtered3mail.com -> some
filtered4mail.com -> none
filtered1 -> all@mail.com
filtered2 -> none@mail.com

第一個Map( barFilters )鍵不包含@字符。 我嘗試過的另一件事:

->在兩邊加上雙引號( " )。

->使用帶轉義符( \\@ )的\\@

->使用等效於@( U+0040 )的Unicode。

->使用等效於@( \@ )的轉義序列。

->使用等效於@( &#64; )的HTML代碼。

他們都沒有工作。

為什么會發生這種情況,我該如何解決呢? 這是錯誤還是功能?

暫無
暫無

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

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