gpt4 book ai didi

java - Spring Boot 在从 application.yml 注入(inject) Map 时不包含特殊字符

转载 作者:行者123 更新时间:2023-11-30 09:59:13 25 4
gpt4 key购买 nike

我有一个简单的 Spring Boot 项目,旨在从 application.yml 读取和转换数据。并将其转换为 Java Map<String,String> .在我项目的业务层中,我需要使用电子邮件地址作为键来填充该映射。问题从这里开始。 Spring(或 Spring Boot)无法正常工作。它完全忽略了 @字符在键端,但在值端正常工作。

下面是一些代码:

应用程序.java

@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));
}
}

应用程序.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) 键不包括 @人物。我尝试的另一件事:

-> 在两边添加双引号 ( ")。

-> 使用带转义符的@ ( \@ )。

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

-> 使用等价于 @ ( \u0040 ) 的转义序列。

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

他们都没有工作。

为什么会发生这种情况,我该如何解决?这是错误还是功能?

最佳答案

根据 this comment , 你必须使用

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

关于java - Spring Boot 在从 application.yml 注入(inject) Map 时不包含特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59090606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com