编码问题 xml Thymeleaf与文本输入的问题

问题描述 投票:1回答:1

目的是以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;
 }

这就是用法 "schemma "是xml字符串 "json "是json字符串,key:value对。

@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编码的,我不知道如何用StringTemplateResolver做到这一点。我找了其他的解析器,但所有的解析器似乎都需要一个文件作为输入。我只有一个sting作为输入,我不希望建立一个文件,作为一个变通的方法。我正在寻找一个解决方案,用UTF-8编码我的xml-string而不建立一个文件。

你有什么想法吗?

编辑这里有一个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>

所有的üöä都是错误的格式。

xml encoding thymeleaf
1个回答
1
投票

而不是使用

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

我用的是

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

与utext我告诉我的代码unescape文本。

谢谢JosefZ

© www.soinside.com 2019 - 2024. All rights reserved.