今天使用SpringBoot+Freemarker写一个小Demo,Controller接口返回model值,使用ftl模板
浏览器显示的错误:
SpringBoot后台显示:
javax.servlet.ServletException: Circular view path [user]: would dispatch back to the current handler URL [/user] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)
at org.springframework.web.servlet.view.InternalResourceView.prepareForRendering(InternalResourceView.java:210) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:148) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
............
这里我在Controller返回一个User的list集合,然后使用一个user.ftl的模板来解析数据,Controller接口:
之前的解决方法是把@Controller的注解改为:@RestController,这个是错误的,如果改为@RestController,返回给页面的则是一个对象值,也就是“user”字符串了,浏览器打印也是字符串
最后解决方法:
找到Freemaker的源码:
发现这里默认的模板后缀竟然改成了ftlh,瞬间明白。把user.ftl改为user.ftlh后,问题解决
原来SpringBoot 2.2.0开始freemarker模板默认扩展名改为ftlh了。
参考文章:
https://www.cnblogs.com/silvestris/p/12037704.html
http://springboot.javaboy.org/2019/0705/springboot-freemarker