我有一个使用Spring Boot,Kotlin和Thymeleaf构建的Web应用程序。我有一些HTML模板正在工作,但是我想让其中一个返回XML文件。该XML将是使用Thymeleaf属性的Thymeleaf模板。在Spring Boot中这样做的正确方法是什么?另外,应该下载XML。
我已经看到了这一点:Spring Boot & Thymeleaf with XML Templates,但看来这将切换Thymeleaf生成整个站点的XML,而不仅仅是针对单个控制器。
答案 0 :(得分:1)
那么,一种实现方法是用一种方法配置Thymeleaf引擎。例如:
@GetMapping("/xml")
public void xml(HttpServletResponse res) throws Exception {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setApplicationContext(new AnnotationConfigApplicationContext());
resolver.setPrefix("classpath:/xml/");
resolver.setSuffix(".xml");
resolver.setCharacterEncoding("UTF-8");
resolver.setTemplateMode(TemplateMode.XML);
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(resolver);
Context ctx = new Context();
ctx.setVariable("notes", Arrays.asList("one note", "two note"));
String xml = engine.process("template", ctx);
res.setHeader("Content-Disposition", "attachment; filename=template.xml");
res.setContentType("application/xml");
PrintWriter writer = res.getWriter();
writer.print(xml);
writer.close();
}
模板位于src/main/resources/xml/template.xml
中。您可以使用ctx.setVariable()
方法设置模型变量。
答案 1 :(得分:0)
除非您想在XML文件中使用Thymeleaf属性-例如,类似以下内容:
http://localhost:8080/login
http://localhost:8080/signup
那么您不必配置任何新的TemplateResolvers或TemplateEngines(Thymeleaf与该问题无关)。
除此之外,您没有提供足够的信息。 plenty中有examples个使用Spring下载文件,并且由于我不知道您生成xml的方式或方式,因此我无法在其中提出任何建议。 Here is something you can start with, I guess。