Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/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
Spring Boot中的多视图渲染问题_Spring_Spring Mvc_Spring Boot - Fatal编程技术网

Spring Boot中的多视图渲染问题

Spring Boot中的多视图渲染问题,spring,spring-mvc,spring-boot,Spring,Spring Mvc,Spring Boot,我正在使用Spring启动应用程序。在这方面,我在前端使用了SpringMVC。我需要下载各种报告,如pdf、xls。据我所知,Spring Boot在内部使用ContentNegotiatingViewResolver、BeanNameViewResolver、ViewResolverComposite和InternalResourceViewResolver。我没有重写代码中的任何bean,也没有使用提供的默认配置 目前要测试,我正在使用下面的url http://localhost:808

我正在使用Spring启动应用程序。在这方面,我在前端使用了SpringMVC。我需要下载各种报告,如pdf、xls。据我所知,Spring Boot在内部使用ContentNegotiatingViewResolver、BeanNameViewResolver、ViewResolverComposite和InternalResourceViewResolver。我没有重写代码中的任何bean,也没有使用提供的默认配置

目前要测试,我正在使用下面的url

http://localhost:8080/SearchCustomers.xls
application.Properties文件中的属性是

spring.mvc.media-types.pdf=application/pdf
spring.mvc.media-types.xls=application/vnd.ms-excel
在我的代码中,我创建了一个视图类,它从
AbstractPdfView
扩展而来。它是一个Springbean,id是“SearchCustomers”。控制器代码返回“SearchCustomers”作为视图名称

每当我执行上述代码时,
ContentNegotiatingViewResolver
都不会返回任何视图。
contentnegotingviewresolver
在内部使用
BeanNameViewResolver
ViewResolverComposite
InteralResourceViewResolver
来解析视图名称。在我们的例子中,bean名称与视图匹配,但其媒体类型不匹配,因为它在内部与路径扩展以及bean内容类型匹配。这是正确的行为吗

但是,
DispatcherServlet
会通过所有视图解析程序进行重复,这会导致问题

在第二次迭代中,
BeanNameViewResolver
将bean id与控制器返回的视图名称相匹配,并调用pdf视图,我认为这是不正确的


有什么解决办法吗?

我找到了解决办法

如果您只需要一个控制器方法来处理所有类型的请求,那么在这种情况下,您的视图应该以下面的格式提供id

id-视图名+路径扩展名

对于所有类型的请求,My controller方法将视图名称返回为“SearchCustomers”

我为不同的请求创建了不同的视图,如

  • @组件(“SearchCustomers.pdf”)
    类MyPdfView从AbstractPdfView扩展而来

  • @组件(“SearchCustomer.xls”) MyExcelView类从AbstractExcelView扩展而来

  • 在内部,CNVR搜索这些bean。然后它匹配mediatype/contenttype,它返回正确的视图

    我找到了解决方案

    如果您只需要一个控制器方法来处理所有类型的请求,那么在这种情况下,您的视图应该以下面的格式提供id

    id-视图名+路径扩展名

    对于所有类型的请求,My controller方法将视图名称返回为“SearchCustomers”

    我为不同的请求创建了不同的视图,如

  • @组件(“SearchCustomers.pdf”)
    类MyPdfView从AbstractPdfView扩展而来

  • @组件(“SearchCustomer.xls”) MyExcelView类从AbstractExcelView扩展而来

  • 在内部,CNVR搜索这些bean。然后它与返回正确视图的mediatype/contenttype匹配

    ,因此您请求
    xls
    ,并希望返回
    pdf
    视图?您希望它如何工作…不,我不希望它会返回pdf。我希望它会抛出一个错误,没有找到匹配的视图…相反,它会返回pdf视图,因此您请求
    xls
    并希望返回
    pdf
    视图?你期望它如何工作…不,我不期望它会返回pdf…我期望它会抛出一个错误,没有找到匹配的视图…相反,它会返回pdf视图