2015-01-18 3 views
19

Ich habe Controller Mappings /user und /order:Wie wird das Präfix für alle Controller im Spring Boot festgelegt?

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

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

ich diese per URL an http://localhost:8080/api/users und http://localhost:8080/api/orders jeweils zugreifen möchten.

Wie erreiche ich das im Spring Boot?

+1

möglich Duplikat [Frühling Boot-Context Root] (http: // Stackoverflow. com/questions/20405474/spring-boot-context-root) –

Antwort

26

Sie können in Ihrer benutzerdefinierten Konfiguration eine Zuordnung zum Stammkontextpfad Ihrer Spring-Boot-Anwendung zu /api/* bereitstellen.

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

oder fügen Sie diese zu Ihrer application.properties in src\main\resources Ordner

server.contextPath=/api/* 

Mehr Sie hier Spring Boot Context Root finden und hier Add servlet mapping to DispatcherServlet

+28

dies fügt das Präfix zu allem, nicht nur die Controller – CESCO

+0

Beide funktionieren gut, wenn Sie einen Kontext pa hinzufügen möchten th. Die beiden Probleme, denen ich gegenüberstand, waren, dass das Erstellen einer DispatcherServelt-Bean auch bedeutete, dass die/oauth-Routen unter dem Kontextpfad lagen, der außerhalb der REST-Standards liegt. und die Verwendung von contextPath in der Konfiguration führte zu demselben Problem wie auch zu CORS und Tests, die den Kontextpfad überhaupt nicht bemerkten. Ich fügte die @RequestMapping-Annotation bei Bedarf jedem Controller hinzu. –

+12

Es sollte nur "server.contextPath =/api /" sein. Ein trailing * verursacht einen Fehler in Spring Boot Version 1.3.5 – Anand

Verwandte Themen