当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Application.yml双反斜杠字面解释

谭灿
2023-03-14

我的application.yml具有以下属性:

my:
  path: \\\\hostname\\dir

根据我对YAML规范5.7的理解。转义字符一个双反斜杠\\是一个单反斜杠的有效转义序列,因此上述配置应产生my.path:\\hostname\dir的值。

但是,在我的应用程序中,我可以看到属性的值包含加倍的反斜杠:

@RunWith(SpringRunner.class)
@SpringBootTest
public class PropTest {

    @Getter
    @Setter
    public static class MyProp {
        private String path;
    }

    @Autowired
    private MyProp my;

    @Test
    public void testProp() {
        System.out.println(my.path);
    }

    @Configuration
    @EnableConfigurationProperties
    public static class Config {
        @Bean
        @ConfigurationProperties("my")
        public MyProp my() {
            return new MyProp();
        }
    }
}

打印:

\\\\host\\dir

我不能将application.yml中的值放在引号中,因为文件是由配置系统(SaltStack)生成的,并且它有自己的Yaml呈现库。

是Spring Boot/Spring Boot使用的一个Yaml库中的bug吗?有没有办法迫使Spring靴把Yaml中的双反斜杠当作单反斜杠的转义?

共有1个答案

百里飞捷
2023-03-14

引用您链接的规范部分:

请注意,转义序列仅在双引号标量中解释。在所有其他标量样式中,“\”字符没有特殊含义,不可打印的字符不可用。

因此,如果不双引号标量,\就像其他字符一样是一个普通字符,您可以只写

my:
  path: \\hostname\dir
 类似资料:
  • 问题内容: 我有一个字符串“ \\ u003c”,它属于UTF-8字符集。由于存在双反斜杠,因此我无法将其解码为unicode。如何从“ \\ u003c”获取“ \ u003c”?我正在使用Java。 我尝试过 但无法实现我想要的。 这是我的代码 文件的内容是 \ u003c 问题答案: 不知道您是否仍在寻找解决问题的方法(因为您已经接受了答案),但是我仍然会添加我的答案作为针对 所述问题 的可

  • 问题内容: 我正在尝试将转换为,但是我不断遇到各种错误。我认为这是解决方案: 但这给出了以下异常: 问题答案: 将该参数解释为正则表达式。该是转义字符都 和。你需要对正则表达式进行两次转义: 但是你不必为此使用正则表达式,仅是因为你希望逐个字符地进行精确替换,并且这里不需要模式。因此就足够了: 更新:根据注释,你似乎想在JavaScript上下文中使用字符串。你最好使用它来覆盖更多字符。

  • 问题内容: 这是一个“到底发生了什么”的问题。我实际上不需要解决方案。 我必须用双反斜杠替换字符串中的所有单反斜杠。这就是我最终要做的… …其中strRootDirectory是上面的java.lang.String。 现在,我了解了第一个参数的四个反斜杠:regex期望两个反斜杠以表示单个文字反斜杠,而Java希望它们加倍。没关系。 但是,第二个参数的八个反斜杠到底是怎么回事?替换字符串不是应该

  • 我需要将python3中的替换为复杂字符串中的。我知道这个问题已经被问了好几次,但大多数时候都是针对简单字符串,所以没有一个(接受的)答案真正适用于复杂字符串。 这也不同于使用无法解决此问题。请参见下文。 假设字符串是: 直截了当的方法是: 这导致: 语法错误:扫描字符串文字时EOL 这个答案建议使用: 这导致: 所以,没有变化。 这个答案表明: 但是对于如此复杂的字符串,这并不适用: unico

  • 许多发现都是针对python2的,我的例子是python3: 我需要把双背斜线换成单背斜线 这篇文章中的“接受答案”python3用单反斜杠替换双反斜杠在这里不起作用: 那么问题出在哪里呢?非常感谢。 [更新]: 由于@ShadowRanger的回复,所以如果在替换操作后打印字符串,它是预期的,但是,在我的情况下,我需要连接替换后生成另一个变量(conn_str),正如你所看到的,它仍然显示双反斜

  • 问题内容: 我需要在路径字符串中替换为,但是以下代码失败。 有什么有用的建议吗? 问题答案: 使用函数filepath.ToSlash将操作系统路径分隔符替换为路径中的“ /”。 在Windows上,函数返回。在其他操作系统上,该函数按原样返回path参数。