# 27.1.8. 路径匹配与内容协商

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

Spring Boot默认禁用后缀模式匹配。这意味着类似`"GET /projects/spring-boot.json"`的请求，不会匹配到`@GetMapping("/projects/spring-boot")`。这是[Spring MVC应用的一种最佳实践](https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-reference/web.html#mvc-ann-requestmapping-suffix-pattern-match)。过去，这个特性主要对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
```
