0

使用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.:我的应用程序是一个弹簧启动应用程序。

4

2 回答 2

1

@RequestMapping说它产生"application/xls",但你的返回类型是 aString并且你没有用 . 注释返回类型@ResponseBody

如果要返回 Excel 电子表格,则需要在服务器上生成该电子表格并将其作为byte[]请求映射中的 a 返回。我不确定您如何或为什么要返回 a String,除非您的控制器很简单@Controller并且您正在返回视图名称。

于 2016-03-08T20:35:10.957 回答
0

您是否尝试过配置您的 RequestMappingHandlerMapping

handler.setUseSuffixPatternMatch( false )

(无论如何,我都在配置我的 RequestMappingHandlerMapping,所以对我来说,我只需要添加那一行 - 你可能会让 Spring Boot 自动配置该类)。

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.html#setUseRegisteredSuffixPatternMatch-boolean-

可能您可能还需要关闭内容协商 - 我不记得确切的 Spring Boot 默认内容协商是什么,但它可能会影响您的情况。

@Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    configurer.favorPathExtension(false)
}

值得注意的是,如果您正在开发更广泛/现有的应用程序,那么这两种配置可能会产生更广泛的影响,因此如果是这种情况,请谨慎行事!

于 2016-03-08T21:30:56.530 回答