Java 自定义MVC视图实现未在SpringBoot中呈现
在Spring Boot 1.3.0应用程序中,我尝试使用单个控制器方法,仅基于路径生成HTML和CSV格式的响应(无内容协商): 为了处理HTML格式,我有一个Java 自定义MVC视图实现未在SpringBoot中呈现,java,spring-mvc,spring-boot,Java,Spring Mvc,Spring Boot,在Spring Boot 1.3.0应用程序中,我尝试使用单个控制器方法,仅基于路径生成HTML和CSV格式的响应(无内容协商): 为了处理HTML格式,我有一个src\resources\templates\htmlReport.tplGroovy模板。当我访问/app/report.html时,SpringBoot能够很好地定位和调用模板 要处理CSV格式,我有一个自定义视图: @Component public class ReportCsvView extends AbstractVie
src\resources\templates\htmlReport.tpl
Groovy模板。当我访问/app/report.html时,SpringBoot能够很好地定位和调用模板
要处理CSV格式,我有一个自定义视图:
@Component
public class ReportCsvView extends AbstractView {
@Override
public String getContentType() {
return "text/csv";
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
PrintWriter writer = response.getWriter();
// write CSV to writer
}
}
问题是,当我点击/app/report.csv时,会调用匿名ViewResolver的resolveViewName
方法,并执行返回ReportCsvView
实例的分支。到现在为止,一直都还不错。但是,未调用renderMergedOutputModel
(尽管调用了两次getContentType
方法),导致HTTP 404响应
如何使视图实际渲染
UPDATE我删除了对getContentType
方法的覆盖;因此,renderMergeOutputModel
现在被调用
@Component
public class ReportCsvView extends AbstractView {
@Override
public String getContentType() {
return "text/csv";
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
PrintWriter writer = response.getWriter();
// write CSV to writer
}
}
@Configuration
public class ReportCsvViewConfigurer extends WebMvcConfigurerAdapter {
@Autowired
private ReportCsvView reportCsvView;
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.viewResolver(new ViewResolver() {
@Override
public View resolveViewName(String name, Locale locale) throws Exception {
return "csvReport".equals(name) ? reportCsvView : null;
}
});
super.configureViewResolvers(registry);
}
}