Spring Boot 2.2.1后缀模式问题

时间:2019-11-19 16:32:51

标签: java spring spring-boot spring-mvc

我有一些测试可以将资源放入端点。我们支持使用路径扩展来确定请求的内容类型。路径中不包含文件后缀的测试可以通过;包含后缀的测试以406失败。该后缀已在ContentNegotationConfigurer中注册,并且我尝试了spring.mvc.pathmatch.use-suffix-patternspring.mvc.pathmatch.use-registered-suffix-patternspring.mvc.contentnegotiation.favor-path-extensionspring.mvc.contentnegotiation.favor-parameter的每种组合无济于事。

有问题的请求映射接受所有值并生成html,xml和json。

我在DispatcherServlet中注意到,调试到RequestMappingInfo.getMatchingCondition时,消费条件正确匹配,但是生产条件返回null。进一步讲,我看到ContentNegotiationManager有4种策略,其中一种是ServletPathExtensionContentNegotationStrategy。此类具有方法resolveMediaTypeKey,该方法基本上试图从已注册的媒体类型中查找扩展名。因为我的文件扩展名和媒体类型已注册,所以它匹配并返回该扩展名的媒体类型(不是html,xml或json),然后ContentNegotationManager将该值返回到ProducesRequestCondition 。此时,将返回的媒体类型与声明的produces值进行比较。由于返回的值与控制器声明的任何产生的值都不匹配,因此该条件失败。

这对我来说似乎是个问题。似乎该行为暗示着,如果您对控制器进行PUT / POST /任何资源操作,并且使用文件后缀来确定请求的内容类型,则在尝试确定处理程序时,它还会尝试将其强制为返回类型。映射,情况并非如此。

在Spring Boot 2.1.x中这不是问题。好奇这是一个合法问题,还是我想念一些东西。

0 个答案:

没有答案