2015-01-18 16 views
19

mam mapowania kontrolerów do /user i /order:Jak określić prefiks dla wszystkich kontrolerów w Spring Boot?

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

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

Chcę uzyskać do nich dostęp przez adres URL w http://localhost:8080/api/users i http://localhost:8080/api/orders, odpowiednio.

Jak to osiągnąć w Spring Boot?

+1

możliwe duplikat [Wiosna Boot Kontekst root] (http: // stackoverflow. com/questions/20405474/spring-boot-context-root) –

Odpowiedz

26

Możesz podać odwzorowanie ścieżki kontekstu root aplikacji do uruchamiania wiosennego na /api/* w swojej konfiguracji niestandardowej.

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; 
    } 
} 

lub dodać do swojej application.properties w src\main\resources folderze

server.contextPath=/api/* 

Więcej znajdziesz tutaj Spring Boot Context Root i tutaj Add servlet mapping to DispatcherServlet

+28

to dodaje prefiks do wszystkiego, nie tylko kontrolerów – CESCO

+0

Oba działają świetnie, gdy chcą dodać pa th. Dwa problemy, z którymi się zetknąłem polegały na tym, że utworzenie komponentu DispatcherServelt oznaczało również, że trasy/oauth były pod ścieżką kontekstu, która nie mieści się w standardach RESTful; i użycie parametru contextPath w konfiguracji wprowadziło ten sam problem, co CORS, a testy nie były w ogóle świadome ścieżki kontekstu. W rezultacie dodałem adnotację @RequestMapping do każdego kontrolera. –

+12

Powinien to być po prostu "server.contextPath =/api /". Jeśli przyczyną jest błąd w Spring Boot, wersja 1.3.5 – Anand