27.1.8. 路径匹配与内容协商

Spring MVC能够查看请求路径,将HTTP请求映射到处理程序,并把它匹配到应用里定义的映射关系(比如,Controller方法的@GetMapping注解)。

Spring Boot默认禁用后缀模式匹配。这意味着类似"GET /projects/spring-boot.json"的请求,不会匹配到@GetMapping("/projects/spring-boot")。这是Spring MVC应用的一种最佳实践。过去,这个特性主要对HTTP客户端有用。HTTP客户端没有发送适当的"Accept"请求头。我们需要确保给客户端发送了正确的内容类型。现在,内容协商更为可靠。

还有其它方式处理HTTP客户端没有发送适当的"Accept"请求头的情况。不使用后缀匹配,但我们可以使用一个查询参数,来确保类似于"GET /projects/spring-boot?format=json"的请求会映射到@GetMapping("/projects/spring-boot")

spring.mvc.contentnegotiation.favor-parameter=true
# We can change the parameter name, which is "format" by default:
# spring.mvc.contentnegotiation.parameter-name=myparam
# We can also register additional file extensions/media types with:
spring.mvc.contentnegotiation.media-types.markdown=text/markdown

如果你理解上面的警告,但还是想要在你的应用里使用后缀模式匹配,你需要下面的配置:

spring.mvc.contentnegotiation.favor-path-extension=true
# You can also restrict that feature to known extensions only
# spring.mvc.pathmatch.use-registered-suffix-pattern=true
# We can also register additional file extensions/media types with:
# spring.mvc.contentnegotiation.media-types.adoc=text/asciidoc