[SPRING] Spring Boot에서 Yaml의 Map 키에서 도트를 이스케이프 처리
SPRINGSpring Boot에서 Yaml의 Map 키에서 도트를 이스케이프 처리
나는 다음과 같은 yml 설정을 가지고있다 :
foo:
bar.com:
a: b
baz.com:
a: c
다음 클래스를 사용하여 Spring은 키 'bar'와 'baz'가있는 맵을 주입하려고 시도하며, 도트를 구분 기호로 처리합니다.
public class JavaBean {
private Map<String, AnotherBean> foo;
(...)
}
열쇠 (예 : 'bar.com'또는 'bar.com')를 인용하려고했지만 아무 소용이 없는지 - 여전히 동일한 문제입니다. 이 문제를 해결할 방법이 있습니까?
해결법
-
==============================
1.스프링 부트 1.4.3에서 나에게 맞는 @ fivetenwill의 답변의 약간의 개정. 릴리 :
스프링 부트 1.4.3에서 나에게 맞는 @ fivetenwill의 답변의 약간의 개정. 릴리 :
foo: "[bar.com]": a: b "[baz.com]": a: c
따옴표 안에 괄호가 있어야합니다. 그렇지 않으면 YAML 파서는 기본적으로 스프링에 도달하기 전에 파서를 버리고 속성 이름에 넣지 않습니다.
-
==============================
2.yaml 키를 Java bean 속성에 자동 맵핑하려는 경우에는 불가능합니다. 이유는, Spring은 먼저 YAML을 속성 형식으로 변환합니다. 아래 링크의 24.6.1 절을 참조하십시오 :
yaml 키를 Java bean 속성에 자동 맵핑하려는 경우에는 불가능합니다. 이유는, Spring은 먼저 YAML을 속성 형식으로 변환합니다. 아래 링크의 24.6.1 절을 참조하십시오 :
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
따라서 YAML은 다음으로 변환됩니다.
foo.bar.com.a=b foo.baz.com.a=c
위의 키는 표준 속성으로 파싱됩니다.
해결 방법은 Spring의 YamlMapFactoryBean을 사용하여 Yaml Map을 그대로 만들 수 있습니다. 그런 다음이 맵을 사용하여 직접 Java bean을 작성할 수 있습니다.
@Configuration public class Config { private Map<String, Object> foo; @Bean public Map<String, Object> setup() { foo = yamlFactory().getObject(); System.out.println(foo); //Prints {foo={bar.com={a=b}, baz.com={a=c}}} return foo; } @Bean public YamlMapFactoryBean yamlFactory() { YamlMapFactoryBean factory = new YamlMapFactoryBean(); factory.setResources(resource()); return factory; } public Resource resource() { return new ClassPathResource("a.yaml"); //a.yaml contains your yaml config in question } }
-
==============================
3.이것은 작동해야합니다 :
이것은 작동해야합니다 :
foo: ["bar.com"]: a: b ["baz.com"]: a: c
스프링 부트 구성에서 영감을 얻습니다.
from https://stackoverflow.com/questions/34070987/escaping-a-dot-in-a-map-key-in-yaml-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] j_spring_security_logout 호출이 작동하지 않습니다. (0) | 2019.02.09 |
---|---|
[SPRING] Spring MVC 컨트롤러 메소드 매개 변수는 어떻게 작동하나요? (0) | 2019.02.09 |
[SPRING] Java 기반 구성으로 보안 주석을 설정하는 방법은 무엇입니까? (0) | 2019.02.09 |
[SPRING] @ConfigurationProperties 접두사가 작동하지 않습니다. (0) | 2019.02.09 |
[SPRING] Jackson ObjectMapper는 POJO를 비 직렬화 할 수 없으며 예외를 throw합니다. 유형에 적합한 생성자가 없습니다. [...] : JSON 객체에서 인스턴스화 할 수 없습니다. (0) | 2019.02.09 |