Spring-web尝试查找以通知路径变量命名的资源

时间:2016-03-08 20:24:25

标签: spring spring-boot spring-web

使用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应用程序。

2 个答案:

答案 0 :(得分:1)

您的@RequestMapping表示它会生成"application/xls",但您的返回类型为String,并且您没有使用@ResponseBody注释返回类型。

如果要返回Excel电子表格,则需要在服务器上生成该电子表格,并从请求映射中将其作为byte[]返回。我不确定您返回String的方式或原因,除非您的控制器是一个简单的@Controller并且您正在返回视图名称。<\ n / p>

答案 1 :(得分:0)

您是否尝试过配置RequestMappingHandlerMapping

handler.setUseSuffixPatternMatch( false )

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

请参阅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)
}

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