Typesafe ConfigFactory错误与保留字符

时间:2016-08-19 17:24:40

标签: java typesafe hocon

您好我正在尝试从Java中的String加载配置,如下所示:

@Test
public void testIllegalCharacter(){
    String input = "prop=\\asd";
    Config conf = ConfigFactory.parseString(input);
}

上面的代码会产生以下错误:

com.typesafe.config.ConfigException$Parse: String: 1: Expecting a value but got wrong token: '\' (Reserved character '\' is not allowed outside quotes) (if you intended '\' (Reserved character '\' is not allowed outside quotes) to be part of a key or string value, try enclosing the key or value in double quotes, or you may be able to rename the file .properties rather than .conf)

我知道我的字符串中有非法字符。虽然如何找到完整的非法字符集?

如果我(例如)将此String转换为Properties对象,然后使用ConfigFactory.parseProperties解析它,我可以看到值"\\asd"已解析为"asd".所以那里必须在类型安全的库中进行一些清理,我希望我自己可以称之为排毒,但我看不清楚如何。解析属性不是一个可行的解决方案,因为配置也可以由对象或列表组成。

有没有人有任何建议如何解决这个问题?

或者,有人可以指出所有保留的字符集吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

如果我正确理解了错误消息,您应该在引号周围加上特殊字符,例如:像这样:

"prop=\"\\asd\"";

不确定为什么你想要一个带有反斜杠a(' \ a')的属性定义,但我想我不需要知道: - )

答案 1 :(得分:0)

我想我可能找到了答案。我需要设置ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES)

适用于以下测试:

@Test
    public void test(){
        String input = "prop=C:/MyDocuments/mydir";
        Config conf = ConfigFactory.parseString(input, ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES));
        assertEquals("C:/MyDocuments/mydir", conf.getAnyRef("prop"));
    }

但不适用于使用反斜杠的测试

@Test
    public void test(){
        String input = "prop=C:\\MyDocuments\\mydir";
        Config conf = ConfigFactory.parseString(input, ConfigParseOptions.defaults().setSyntax(ConfigSyntax.PROPERTIES));
        assertEquals("C:\\MyDocuments\\mydir", conf.getAnyRef("prop"));
    } 

失败了:

org.junit.ComparisonFailure: 
Expected :C:\MyDocuments\mydir
Actual   :C:MyDocumentsmydir

所以我不确定这是明确的答案......