Я пытаюсь смешать mvc и отдых в одном проекте весенней загрузки.
Я хочу установить базовый путь для всех остальных контроллеров (например, example.com/api) в одном месте (я не хочу аннотировать каждый контроллер @RequestMapping('api/products')
, вместо этого просто @RequestMapping('/products')
.
Контроллеры MVC должны быть доступны на example.com/whatever
Является ли это возможным?
(Я не использую Spring Data Rest, просто Spring mvc)
java
spring
rest
spring-boot
spring-mvc
Теймураз
источник
источник
Ответы:
С Spring Boot 1.2+ (<2.0) все, что требуется, - это одно свойство в application.properties:
Ссылка для ссылки: https://docs.spring.io/spring-data/rest/docs/current/reference/html/#getting-started.changing-base-uri
Для 2.x используйте
источник
Немного поздно, но тот же вопрос привел меня сюда, прежде чем я получил ответ, поэтому я публикую его здесь. Создайте (если у вас его еще нет) application.properties и добавьте
Итак, в предыдущем примере, если у вас есть RestController,
@RequestMapping("/test")
вы получите к нему доступ какlocalhost:8080/api/test/{your_rest_method}
источник вопроса: как мне выбрать URL-адрес для моего весеннего загрузочного веб-приложения
источник
Для версии Spring boot framework
2.0.4.RELEASE+
. Добавьте эту строку вapplication.properties
источник
spring.data.rest.basePath
не работает для Spring boot 2Так как это первое обнаружение проблемы в Google, и я предполагаю, что больше людей будут ее искать. Начиная с Spring Boot 1.4.0 появилась новая опция. Теперь можно определить настраиваемый RequestMappingHandlerMapping, который позволяет определять другой путь для классов, аннотированных с помощью @RestController.
Другая версия с пользовательскими аннотациями, сочетающая @RestController с @RequestMapping, может быть найдена здесь. сообщении блога.
источник
Я не мог поверить, насколько сложен ответ на этот, казалось бы, простой вопрос. Вот несколько ссылок:
Есть много разных вещей, которые следует учитывать:
server.context-path=/api
в,application.properties
вы можете настроить префикс для всего (его server.context-path, а не server.contextPath!)spring.data.rest.base-path
вapplication.properties
. Но Плейн@RestController
это во внимание не примет. Согласно документации Spring data rest, есть аннотация,@BasePathAwareController
которую вы можете использовать для этого. Но у меня действительно возникают проблемы с Spring-security, когда я пытаюсь защитить такой контроллер. Больше не найдено.Другой обходной путь - простой трюк. Вы не можете использовать префикс статической String в аннотации, но можете использовать такие выражения:
источник
Для Boot 2.0.0+ это работает для меня: server.servlet.context-path = / api
источник
Нашел чистое решение, которое затрагивает только остальные контроллеры.
Spring boot зарегистрирует два сервлета диспетчера - по умолчанию
dispatcherServlet
для контроллеров иrestApi
диспетчер для@RestControllers
определенных вrest.xml
:Пример
rest.xml
:Но вы не ограничены :
XmlWebApplicationContext
, вы можете использовать любой другой доступный тип контекста, т.е.AnnotationConfigWebApplicationContext
,GenericWebApplicationContext
,GroovyWebApplicationContext
, ...jsonMessageConverter
,messageConverters
beans в контексте отдыха, они могут быть определены в родительском контекстеисточник
Вы можете создать собственную аннотацию для своих контроллеров:
Используйте его вместо обычного @RestController в ваших классах контроллера и аннотируйте методы с помощью @RequestMapping.
Только что протестировал - работает в Spring 4.2!
источник
RequestMappingHandlerMapping
. Spring Data REST имеет сопоставитель, похожий на то, что вам нужно -BasePathAwareHandlerMapping
.Я могу немного опоздать, НО ... Я считаю, что это лучшее решение. Настройте его в своем application.yml (или аналогичном файле конфигурации):
Насколько я помню, это все - все ваши репозитории будут отображаться под этим URI.
источник
spring.data.rest.base-path
влияет только на spring-data-rest и spring-hateoas. Обычный @RestController по-прежнему будет находиться в корне!Попробуйте использовать PathMatchConfigurer (Spring Boot 2.x):
источник
Вы можете создать базовый класс с
@RequestMapping("rest")
аннотациями и расширить все остальные классы этим базовым классом.Теперь все классы, расширяющие этот базовый класс, будут доступны по адресу
rest/**
.источник
Для тех, кто использует конфигурацию YAML (application.yaml).
Примечание : это работает только для
Spring Boot 2.x.x
Если вы все еще используете
Spring Boot 1.x
источник
С Spring-boot 2.x вы можете настроить в application.properties:
источник
server.servlet.context-path=/api
было бы решением, я думаю. У меня была такая же проблема, и это помогло мне решить. Я использовал server.context-path. Однако это казалось устаревшим, и я обнаружил, чтоserver.servlet.context-path
теперь решает проблему. Еще один обходной путь, который я нашел, - это добавление базового тега к моим страницам внешнего интерфейса (H5). Надеюсь, это кому-то поможет.ура
источник
Это решение применимо, если:
RestController
но неController
.Вы не используете Spring Data Rest.
}
Это похоже на решение, опубликованное mh-dev, но я думаю, что оно немного чище и должно поддерживаться в любой версии Spring Boot 1.4.0+, включая 2.0.0+.
источник
Per Spring Data REST документации , при использовании application.properties , использовать это свойство , чтобы установить базовый путь:
Но обратите внимание, что Spring использует ослабленную привязку , поэтому можно использовать этот вариант:
... или этот, если вы предпочитаете:
Если вы используете application.yml , вы должны использовать двоеточия для разделителей ключей:
(Для справки, в марте 2018 года был создан соответствующий тикет, чтобы прояснить документы.)
источник
работал server.contextPath = / path
источник
Вы можете создать собственную аннотацию для своих контроллеров:
Используйте его вместо обычного @RestController в ваших классах контроллера и аннотируйте методы с помощью @RequestMapping.
Прекрасно работает в Spring 4.2!
источник