Ogu*_*glu 2 java spring yaml properties spring-boot
我有一个简单的 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);
}
}
Run Code Online (Sandbox Code Playgroud)
引导程序
@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));
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序.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
Run Code Online (Sandbox Code Playgroud)
最后,这是控制台输出:
filtered1mail.com -> all
filtered2mail.com -> all
filtered3mail.com -> some
filtered4mail.com -> none
filtered1 -> all@mail.com
filtered2 -> none@mail.com
Run Code Online (Sandbox Code Playgroud)
第一个 Map ( barFilters) 键不包含@字符。我尝试过的另一件事:
->"在两边添加双引号 ( )。
-> 将 @ 与转义字符 ( \@)一起使用。
-> 使用与@ ( U+0040)等效的 Unicode 。
-> 使用等效于 @ ( \u0040) 的转义序列。
-> 使用与 @ ( @)等效的 HTML 代码。
他们都没有工作。
为什么会发生这种情况,我该如何解决?这是错误还是功能?
根据此评论,您必须使用
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |