Spring-禁用路径扩展截断/内容协商

时间:2019-02-26 11:10:17

标签: spring spring-boot spring-mvc

在SpringBoot v2.1.3中,按如下所示设置 @RequestMapping 时:

@GetMapping("/assets/{name}")
public AssetInfo assetInfo(@PathVariable("name") String name) {
  return getAssetInfo(name);
}

查询/assets/image123.jpg会导致:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
    at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:219)

因为它假设产生的Content-Type 必须 image/jpeg

2 个答案:

答案 0 :(得分:0)

您可以在WebMvcConfigurer中禁用它:

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

这将解决内容协商的问题-但Spring仍然从PathVariable( id = "image123" )中排除扩展。可以使用以下命令禁用它:

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
  configurer.setUseSuffixPatternMatch(false);
}

答案 1 :(得分:0)

谢谢!只需将缺失的位添加到 the answer from TeNNox 以便更轻松地复制和粘贴 :) 我会添加注释,但您不能在那里编写多行代码。

@EnableWebMvc
@Configuration
public class SpringConfigurationForMVC extends WebMvcConfigurerAdapter {

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

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        configurer.setUseSuffixPatternMatch(false);
    }
}