Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义MVC视图实现未在SpringBoot中呈现_Java_Spring Mvc_Spring Boot - Fatal编程技术网

Java 自定义MVC视图实现未在SpringBoot中呈现

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

在Spring Boot 1.3.0应用程序中,我尝试使用单个控制器方法,仅基于路径生成HTML和CSV格式的响应(无内容协商):

为了处理HTML格式,我有一个
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);
    }
}