【问题标题】:Encoding Problem xml Thymeleaf with text input使用文本输入编码问题 xml Thymeleaf
【发布时间】:2020-06-10 20:29:08
【问题描述】:

我们的目标是输入一个 xml(string) 和一个 json(string) 作为输入,并从中构建一个带有 thymeleaf 的模板。配置:

@Bean
StringTemplateResolver xmlTemplateResolver(ApplicationContext appCtx) {
        StringTemplateResolver templateResolver = new StringTemplateResolver();
        templateResolver.setTemplateMode(TemplateMode.XML);
         return templateResolver;
}

@Bean(name="springTemplateEngine")
  SpringTemplateEngine templateEngine(ApplicationContext appCtx) {
     SpringTemplateEngine templateEngine = new SpringTemplateEngine();
     templateEngine.setTemplateResolver(xmlTemplateResolver(appCtx));

     return templateEngine;
 }

这是用法:“schema”是 xml 字符串,“json”是带有键:值对的 json 字符串

@Autowired
SpringTemplateEngine springTemplateEngine;

...

Context context = new Context();
ObjectMapper mapper = new ObjectMapper(new JsonFactory());
Map<String, Object> map  = mapper.readValue(json, new TypeReference<Map<String,Object>>(){});

for (Map.Entry<String, Object> entry : map.entrySet()) {
    context.setVariable(entry.getKey(),entry.getValue());
}

String content = springTemplateEngine.process(schema, context);

替换工作正常,但 ö,ü,ä 等单词的编码不起作用。我猜它不是 UTF-8 编码的,我不知道如何使用 StringTemplateResolver 来做到这一点。我寻找其他解析器,但他们似乎都想要一个文件作为输入。我只是有一个输入作为输入,我不想从中构建一个文件作为解决方法。我正在寻找一种解决方案,在不构建文件的情况下使用 UTF-8 对我的 xml 字符串进行编码。

你有什么想法吗?

编辑 这是一个示例Json

  {
    "vorgang": {
        "vorgangsid":"12345678",
        "datum":"2020-06-10"
    },
     "val":"toller Wert üöä",
   "personen": [
        {
            "name":"Müller",
            "vorname":"Klaus"
        },{
             "name":"Mälzer",
             "vorname":"Mürte"
        }
    ]
}

这是一个示例架构

<?xml version="1.0" encoding="UTF-8"?>
<Schema>
     <was th:text="${val}"></was>
      <vorgang>
        <VorgangsID th:text="${vorgang['vorgangsid']}"></VorgangsID>
        <Anlagedatum th:text="${vorgang['datum']}"></Anlagedatum>
        <wert> ü ö ä</wert>
    </vorgang>
     <Personen th:each="person : ${personen}" >
        <Person>
        <name th:text="${person.name}" ></name>
        <vorname th:text="${person.vorname}" ></vorname>
        </Person>
    </Personen>
</Schema>

这是预期的结果

<?xml version="1.0" encoding="UTF-8"?>
<Schema>
     <was>toller Wert üöä</was>
      <vorgang>
        <VorgangsID>12345678</VorgangsID>
        <Anlagedatum>2020-06-10</Anlagedatum>
        <wert> ü ö ä</wert>
    </vorgang>
     <Personen >
        <Person>
        <name >Müller</name>
        <vorname >Klaus</vorname>
        </Person>
    </Personen>
     <Personen >
        <Person>
        <name >Mälzer</name>
        <vorname >Mürte</vorname>
        </Person>
    </Personen>
</Schema>

这是实际结果

   <?xml version="1.0" encoding="UTF-8"?>
<Schema>
     <was>toller Wert &#xfc;&#xf6;&#xe4;</was>
      <vorgang>
        <VorgangsID>12345678</VorgangsID>
        <Anlagedatum>2020-06-10</Anlagedatum>
        <wert> ü ö ä</wert>
    </vorgang>
     <Personen >
        <Person>
        <name >M&#xfc;ller</name>
        <vorname >Klaus</vorname>
        </Person>
    </Personen>
     <Personen >
        <Person>
        <name >M&#xe4;lzer</name>
        <vorname >M&#xfc;rte</vorname>
        </Person>
    </Personen>
</Schema>

所有 üöä 的格式都不正确。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请edit您的问题提供minimal reproducible example。这应该包含 xml 和 json 字符串的(清理)示例以及失败和预期的输出。那些 xml 和 json 字符串是从哪里来的?
  • 我添加了一个例子,感谢欢迎:)
  • 抱歉,我不知道如何在 thymeleafunescape a XML numeric character entity reference... 可能是 th:text= 分配的东西。可能是获取/读取 Json 字符串的东西?
  • 我可以用 th:utext= 谢谢解决我的问题

标签: xml encoding thymeleaf


【解决方案1】:

而不是使用

<was th:text="${val}"></was>

我用过

<was th:utext="${val}"></was>

使用 utext 我告诉我的代码取消转义文本。

感谢约瑟夫兹

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 2013-12-16
    • 2013-12-15
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2019-10-02
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多