5

在调用我的控制器方法之前,我无法弄清楚为什么以下请求中的文件扩展名 (.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:.+}"

文件名将包含扩展名,但这并不能解释为什么设置所有这些配置器没有取得任何效果????

4

0 回答 0