我有一个带有控制器的Spring Boot应用程序,它返回一个ModelAndView和Thymeleaf来渲染模板,模板位于/src/main/resources/templates/*.html
这工作正常,但我如何配置Spring和/或Thymeleaf来查找xml文件而不是html?
如果它有帮助,我正在使用Gradle和org.springframework.boot:spring-boot-starter-web依赖来设置 . 我目前正在使用带有main方法的类来运行服务器 .
在针对viewResolver和相关事情的各种bean defs尝试和失败之后,我终于通过更改我的application.yaml文件来实现这一点:
spring: thymeleaf: suffix: .xml content-type: text/xml
对于那些稍后阅读的人,您可以使用您的application.properties文件(使用点表示法代替yaml缩进) .
这也有效:
@Configuration public class MyConfig { @Bean SpringResourceTemplateResolver xmlTemplateResolver(ApplicationContext appCtx) { SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver(); templateResolver.setApplicationContext(appCtx); templateResolver.setPrefix("classpath:/templates/"); templateResolver.setSuffix(".xml"); templateResolver.setTemplateMode("XML"); templateResolver.setCharacterEncoding("UTF-8"); templateResolver.setCacheable(false); return templateResolver; } @Bean(name="springTemplateEngine") SpringTemplateEngine templateEngine(ApplicationContext appCtx) { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(xmlTemplateResolver(appCtx)); return templateEngine; } }
并用于使用
@RestController @RequestMapping("/v2/") public class MenuV2Controller { @Autowired SpringTemplateEngine springTemplateEngine; @GetMapping(value ="test",produces = {MediaType.APPLICATION_XML_VALUE}) @ResponseBody public String test(){ Map<String, String> pinfo = new HashMap<>(); Context context = new Context(); context.setVariable("pinfo", pinfo); pinfo.put("lastname", "Jordan"); pinfo.put("firstname", "Michael"); pinfo.put("country", "USA"); String content = springTemplateEngine.process("person-details",context); return content; } }
不要忘记resources / templates文件夹中的模板
<?xml version="1.0" encoding="UTF-8"?> <persons > <person> <fname th:text="${pinfo['lastname']}"></fname> <lname th:text="${pinfo['firstname']}"></lname> <country th:text="${pinfo['country']}"></country> </person> </persons>
2 回答
在针对viewResolver和相关事情的各种bean defs尝试和失败之后,我终于通过更改我的application.yaml文件来实现这一点:
对于那些稍后阅读的人,您可以使用您的application.properties文件(使用点表示法代替yaml缩进) .
这也有效:
并用于使用
不要忘记resources / templates文件夹中的模板