目的是以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 üöä</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>
所有的üöä都是错误的格式。
而不是使用
<was th:text="${val}"></was>
我用的是
<was th:utext="${val}"></was>
与utext我告诉我的代码unescape文本。
谢谢JosefZ