如何在Spring Boot中使用Thymeleaf生成XML?

时间:2019-08-26 17:33:45

标签: spring spring-boot kotlin thymeleaf

我有一个使用Spring Boot,Kotlin和Thymeleaf构建的Web应用程序。我有一些HTML模板正在工作,但是我想让其中一个返回XML文件。该XML将是使用Thymeleaf属性的Thymeleaf模板。在Spring Boot中这样做的正确方法是什么?另外,应该下载XML。

我已经看到了这一点:Spring Boot & Thymeleaf with XML Templates,但看来这将切换Thymeleaf生成整个站点的XML,而不仅仅是针对单个控制器。

2 个答案:

答案 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