使用spring-web,我正在映射一个方法来接收包含点“。”的请求。在路上:
@RequestMapping(value = "download/{id:.+}", method = RequestMethod.GET, produces = "application/xls")
public String download(@PathVariable(value = "id") String id) { ... }
例如,/download/file.xls
应该是有效地址。但是当我尝试访问该地址时,Spring返回Could not find acceptable representation
,好像它正在尝试查找名为file.xls
的资源。
Spring不应该执行download
方法而不是尝试查找名为路径变量的资源?
Obs。:我的应用程序是一个spring-boot应用程序。
答案 0 :(得分:1)
您的@RequestMapping
表示它会生成"application/xls"
,但您的返回类型为String
,并且您没有使用@ResponseBody
注释返回类型。
如果要返回Excel电子表格,则需要在服务器上生成该电子表格,并从请求映射中将其作为byte[]
返回。我不确定您返回String
的方式或原因,除非您的控制器是一个简单的@Controller
并且您正在返回视图名称。<\ n / p>
答案 1 :(得分:0)
您是否尝试过配置RequestMappingHandlerMapping
handler.setUseSuffixPatternMatch( false )
(无论如何,我正在配置我的RequestMappingHandlerMapping,所以对我来说我只需要添加那一行 - 你可能会让Spring Boot autoconfig那个类)。
您可能也需要关闭内容协商 - 我无法准确记住Spring Boot默认内容协商的内容,但它可能会影响您的案例。
@Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false)
}
值得注意的是,如果您正在开发更广泛/现有的应用程序,那么这两种配置都会产生更广泛的影响,所以如果是这种情况那么请谨慎行事!