2015-04-03 10 views
7

Non sono un esperto di Spring, ed essendo la scatola nera che è, è stato difficile cercare di capire le cose da solo, anche con la documentazione di Spring. A volte, non ho idea di cosa sto cercando per iniziare la ricerca ...Spring Boot: Configura un prefisso di URL per RestControllers

Nella mia applicazione Spring Boot, sto cercando di capire come configurare un prefisso url univoco per tutti i miei RestControllers.

Tutto quello che sto cercando è di far pubblicare il contenuto statico dal contesto root, "/", ma i miei endpoint RestController sono accessibili da un contesto diverso, ad esempio "/ api/*".

So come modificare il contesto predefinito dell'app tramite application.properties, ma non è proprio quello che sto cercando. Sto mostrando la mia ignoranza qui quando si tratta di servlet, mappature, ecc., Come dico che sto cercando di ottenere due contesti diversi per due diversi tipi di contenuti.

+1

Perché utilizzare URL diversi invece di servire rappresentazioni diverse dagli stessi URL utilizzando la negoziazione dei contenuti? – chrylis

risposta

6

Penso che sia un punto valido, anche se è comune separarlo come due (o più applicazioni). Supponiamo che tu voglia gestire (1) un sito Web che fornisce HTML/CSS/JS e (2) un'API REST. In cima ai vostri controller si definisce "il contesto" utilizzando @RequestMapping (non si può avere due, quindi quelli saranno in diversi controllori, ancora una volta, a seconda di ciò che si sta cercando di ottenere):

  • @RequestMapping(/web)
  • @RequestMapping(/api/v1)

... e poi dentro quei controllori, nei metodi, si ca assegnare il "resto del URL", ancora una volta utilizzando @RequestMapping(value = "/index", method = RequestMethod.GET).

ad es. /web/index, /web/error; nonché: /api/v1/something, /api/v1/something-else.

Avere un bel pacchetto di convenzione ti aiuterà a non perderti con così tanti controller .

NOTA: Ricordare che NON è necessario ripetere lo stesso contesto in ogni singolo metodo, ma solo "resto dell'URL".

+0

Grazie mille! Speravo in un modo più globale per configurarlo, ma avevo completamente distanziato la possibilità di dare al controller un percorso, non solo i suoi metodi. Funziona, ed è abbastanza semplice. =) – therrin150

0

Non so se aiuta, ho appena postato una soluzione che sto testando in un altro thread:

How to configure a default @RestController URI prefix for all controllers?

+0

La risposta collegata non funziona in questo caso, poiché disabiliterà la pubblicazione di contenuto statico, ma ho aggiunto una risposta aggiuntiva a tale domanda che non presenta questo problema. vedere http://stackoverflow.com/questions/34801351/how-to-configure-a-default-restcontroller-uri-prefix-for-all-controllers/39716758#39716758 –