2015-01-18 3 views
19

У меня есть отображения контроллера в /user и /order:Как указать префикс для всех контроллеров в Spring Boot?

@RestController 
@RequestMapping("/users") 
public class UserController { 
    ... 
} 

@RestController 
@RequestMapping("/orders") 
public class OrderController { 
    ... 
} 

Я хочу, чтобы получить доступ к ним URL в http://localhost:8080/api/users и http://localhost:8080/api/orders соответственно.

Как достичь этого весной Boot?

+1

возможно дубликат [Spring контекст загрузки Root] (HTTP: // StackOverflow. com/questions/20405474/spring-boot-context-root) –

ответ

26

Вы можете указать сопоставление корневого пути пути вашего приложения загрузки весны до /api/* в вашей пользовательской конфигурации.

import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration; 
import org.springframework.boot.context.embedded.ServletRegistrationBean; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.DispatcherServlet; 

@Configuration 
public class DispatcherServletCustomConfiguration { 

    @Bean 
    public DispatcherServlet dispatcherServlet() { 
     return new DispatcherServlet(); 
    } 

    @Bean 
    public ServletRegistrationBean dispatcherServletRegistration() { 
     ServletRegistrationBean registration = new ServletRegistrationBean(
       dispatcherServlet(), "/api/"); 
     registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME); 
     return registration; 
    } 
} 

или добавить к вашей application.properties в src\main\resources папке

server.contextPath=/api/* 

Больше вы найдете здесь Spring Boot Context Root и здесь Add servlet mapping to DispatcherServlet

+28

это добавляет префикс ко всему, а не только контроллеры – CESCO

+0

Оба работают отлично, когда хотят добавить контекст pa е. Две проблемы, с которыми я столкнулся, заключались в том, что создание компонента DispatcherServelt также означало, что маршруты/oauth находились под контекстом, который выходит за рамки стандартов RESTful; и использование contextPath в конфигурации ввело ту же проблему, что и CORS, и тесты вообще не знали о контексте контекста. В итоге я добавил аннотацию @RequestMapping к каждому контроллеру по мере необходимости. –

+12

Это должно быть просто «server.contextPath =/api /». Наличие трейлинга * вызывает ошибку в Spring Boot версии 1.3.5 – Anand

Смежные вопросы