Spring Boot: сопоставление путей и согласование контента

Spring MVC может сопоставлять входящие HTTP-запросы с обработчиками, просматривая путь запроса и сопоставляя его с отображениями, определенными в вашем приложении (например, аннотации @GetMapping для методов Controller).

Spring Boot по умолчанию выбирает отключение сопоставления с суффиксами, что означает, что запросы типа "GET /projects/spring-boot.json" не будут сопоставляться с сопоставлениями @GetMapping("/projects/spring-boot"). Это считается лучшей практикой для приложений Spring MVC. Эта функция в основном была полезна в прошлом для клиентов HTTP, которые не отправляли надлежащие "Accept" заголовки запроса; мы должны были убедиться, что отправили правильный тип контента клиенту. В настоящее время согласование контента намного надежнее.

Существуют и другие способы работы с HTTP-клиентами, которые не всегда отправляют правильные "Accept" заголовки запроса. Вместо использования сопоставления суффиксов мы можем использовать параметр запроса, чтобы гарантировать, что запросы типа "GET /projects/spring-boot?format=json" будут сопоставлены с @GetMapping("/projects/spring-boot"):

spring.mvc.contentnegotiation.favor-parameter=true

# Мы можем изменить имя параметра, которое является "format" по умолчанию:
# spring.mvc.contentnegotiation.parameter-name=myparam

# Мы можем зарегистрировать дополнительные расширения файлов/медиа типы:
spring.mvc.contentnegotiation.media-types.markdown=text/markdown

Если вы понимаете предостережения и хотите, чтобы ваше приложение использовало сопоставление с суффиксами, необходима следующая конфигурация:

spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-suffix-pattern=true

Альтернативно, вместо того, чтобы открывать все шаблоны суффиксов, более безопасно просто поддерживать зарегистрированные шаблоны суффиксов:

spring.mvc.contentnegotiation.favor-path-extension=true
spring.mvc.pathmatch.use-registered-suffix-pattern=true

# Вы можете также зарегистрировать дополнительные расширения файлов/медиа типы:
# spring.mvc.contentnegotiation.media-types.adoc=text/asciidoc

ConfigurableWebBindingInitializer

Spring MVC использует WebBindingInitializer для инициализации WebDataBinder для определенного запроса. Если вы создаете свой собственный ConfigurableWebBindingInitializer @Bean, Spring Boot автоматически настраивает Spring MVC для его использования.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки