在调用我的控制器方法之前,我无法弄清楚为什么以下请求中的文件扩展名 (.jpg) 被剥离:
GET http://blah.com/assets/picture.jpg
我已将内容协商设置为不支持路径扩展:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.blah" })
public class PlatformWebAppConfig extends WebMvcConfigurerAdapter {
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
configurer.favorParameter(false);
configurer.useJaf(false);
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
}
我的控制器是这样的:
@Controller
public class FileUploadRestApi {
@RequestMapping(
value = "/assets/{filename}",
method = RequestMethod.GET)
public void downloadFile(HttpServletResponse response,
@PathVariable("filename") String filename,
Principal principal) {
// ERROR: 'filename' has extension stripped !!!!
}
}
我还尝试将以下内容添加到PlatformWebAppConfig
上面的类中,但没有成功:
@Override
public void configurePathMatch(PathMatchConfigurer matcher) {
matcher.setUseSuffixPatternMatch(true);
matcher.setUseRegisteredSuffixPatternMatch(true);
}
我已经尝试调试该问题,并且我所看到ContentNegotiationManagerFactoryBean.afterPropertiesSet
的肯定是将该favorPathExtension
设置视为错误并且没有设置内容协商策略(如预期的那样)。
更新:
如果我将请求映射更改为
"/assets/{filename:.+}"
文件名将包含扩展名,但这并不能解释为什么设置所有这些配置器没有取得任何效果????