Spring Boot中的多视图渲染问题
我正在使用Spring启动应用程序。在这方面,我在前端使用了SpringMVC。我需要下载各种报告,如pdf、xls。据我所知,Spring Boot在内部使用ContentNegotiatingViewResolver、BeanNameViewResolver、ViewResolverComposite和InternalResourceViewResolver。我没有重写代码中的任何bean,也没有使用提供的默认配置 目前要测试,我正在使用下面的urlSpring 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
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” 我为不同的请求创建了不同的视图,如
类MyPdfView从AbstractPdfView扩展而来
在内部,CNVR搜索这些bean。然后它匹配mediatype/contenttype,它返回正确的视图我找到了解决方案 如果您只需要一个控制器方法来处理所有类型的请求,那么在这种情况下,您的视图应该以下面的格式提供id id-视图名+路径扩展名 前 对于所有类型的请求,My controller方法将视图名称返回为“SearchCustomers” 我为不同的请求创建了不同的视图,如
类MyPdfView从AbstractPdfView扩展而来
在内部,CNVR搜索这些bean。然后它与返回正确视图的mediatype/contenttype匹配,因此您请求
xls
,并希望返回pdf
视图?您希望它如何工作…不,我不希望它会返回pdf。我希望它会抛出一个错误,没有找到匹配的视图…相反,它会返回pdf视图,因此您请求xls
并希望返回pdf
视图?你期望它如何工作…不,我不期望它会返回pdf…我期望它会抛出一个错误,没有找到匹配的视图…相反,它会返回pdf视图