programing

Sping-Boot 구성:맵 채우기에 사용되는 yaml 키의 공백을 유지하는 방법

megabox 2023. 9. 26. 22:15
반응형

Sping-Boot 구성:맵 채우기에 사용되는 yaml 키의 공백을 유지하는 방법

구성 속성 클래스가 있다고 가정해 보겠습니다.

@ConfigurationProperties(prefix = "whitespace.test")
public class WhitespaceTestConfig {

    private Map<String, String> configs;

    public Map<String, String> getConfigs() {
        return configs;
    }

    public void setConfigs(Map<String, String> configs) {
        this.configs = configs;
    }
}

공간이 포함된 키로 구성하려고 합니다.

whitespace.test.configs:
  Key With Whitespace: "I am a value with whitespace in it"

스프링을 통해 이 얌알 미세물을 파싱할 수 있는 것 같고, 분명히 유효한 얌알입니다.그러나 스프링(SnakeYaml?)은 키 문자열의 공백을 제거합니다.

KeyWithWhitespace -> I am a value with whitespace in it

쉬운 해결책은 공간에 대한 특별한 문자를 지정하여 애플리케이션 내에서 대체하는 것입니다만, 봄이 이미 어떤 방식으로 이 문제를 처리했는지 궁금합니다.스프링(SnakeYaml?)이 유지하려는 공간을 알 수 있도록 구성의 공간을 탈출하는 방법이 있을 수도 있고, 아니면 이를 구성하는 방법이 있을 수도 있습니다.

완성도를 위해 싱글 인용과 더블 인용을 사용해 보았습니다.\s \b.

업데이트:

몇 가지 추가 조사 끝에 SnakeYaml 저장소에서 찾고 있는 것이 가능해야 한다는 것을 나타내는 예를 발견했습니다. https://bitbucket.org/asomov/snakeyaml/wiki/Documentation#markdown-header-block-mappings

구체적으로 다음 예를 들 수 있습니다.

# YAML
base armor class: 0
base damage: [4,4]
plus to-hit: 12
plus to-dam: 16
plus to-ac: 0
# Java
{'plus to-hit': 12, 'base damage': [4, 4], 'base armor class': 0, 'plus to-ac': 0, 'plus to-dam': 16}

예제에서는 공백이 키에 지속됩니다.안타깝게도, 저는 실제 공간이 어디서 제거되는지 파악하는 것에 대해 난감해요.

특수 문자가 있는 지도 키의 경우 키를 에워싸야 합니다.'[]'지정한 대로 키를 사용할 수 있습니다.

그러니까, 당신의 경우엔

whitespace.test.configs:
  '[Key With Whitespace]': "I am a value with whitespace in it"

새 바인더는 특성 이름에 대해 훨씬 더 엄격하므로, 특성 이름을 대괄호로 둘러쌀 필요가 있습니다.다음을 시도해 봅니다.

shiro:
  testMap:
    "[/test1]": test1
    "[/test2]": test2

언급URL : https://stackoverflow.com/questions/57795723/sping-boot-config-how-to-keep-whitespace-in-yaml-key-being-used-to-populate-map

반응형