我正在尝试将SpringBoot与Freemarker和Sitemesh一起使用。
当我在应用程序处理请求时转到URL,加载数据和生成HTML输出,但由于某种原因,浏览器已决定要下载文件(包含正确的内容)而不是将其渲染为页面。
这已经有一段时间了,麻烦的是我不确定我所做的改变已经打破了它!
Sitemesh过滤器:
@WebFilter
public class SitemeshFilter extends ConfigurableSiteMeshFilter {
private static final Logger LOG = Logger.getLogger(SitemeshFilter.class);
@Override
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
LOG.debug("SiteMeshFilter creation");
builder.addDecoratorPath("/*", "/templates/main.ftl")
.addExcludedPath("/h2console/*");
}
}
应用:
@ServletComponentScan
@SpringBootApplication
@EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class})
public class ClubManagementApplication {
private static Logger LOG = Logger.getLogger(ClubManagementApplication.class);
public static void main(String[] args) {
SpringApplication.run(ClubManagementApplication.class, args);
}
}
控制器片段:
@Controller
public class ClubController {
@Autowired
ClubService clubService;
@RequestMapping(value = {"Club/{id}","club/{id}"})
public ModelAndView viewClub(@PathVariable("id") int clubId) {
ModelAndView mv = new ModelAndView("club");
....
return mv;
}
}
编辑: 从控制器中的HttpServletRequest对象... 接受:text / html,application / xhtml + xml,application / xml; q = 0.9,image / webp, / ; q = 0.8
在响应标头中: Content-Type:application / octet-stream; charset = UTF-8
我想内容类型是问题....只是要找到为什么它被设置为那样。
答案 0 :(得分:2)
如果其他人偶然发现了这个问题,我将模板文件从ftl更改为html扩展名,然后突然之间就已经醒了。
@Override
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
LOG.debug("SiteMeshFilter creation");
//builder.addDecoratorPath("/*", "/templates/main.ftl");
builder.addDecoratorPath("/*", "/templates/main.html");
}