为什么我的浏览器下载文件而不是渲染SpringBoot& Sitemesh输出?

时间:2016-11-07 16:12:14

标签: spring-boot sitemesh

我正在尝试将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

我想内容类型是问题....只是要找到为什么它被设置为那样。

1 个答案:

答案 0 :(得分:2)

如果其他人偶然发现了这个问题,我将模板文件从ftl更改为html扩展名,然后突然之间就已经醒了。

@Override
protected void applyCustomConfiguration(SiteMeshFilterBuilder builder)   {
    LOG.debug("SiteMeshFilter creation");
    //builder.addDecoratorPath("/*", "/templates/main.ftl");
    builder.addDecoratorPath("/*", "/templates/main.html");
}