2016-01-13 21 views
6

Sto usando Spring Boot 1.3.1.RELEASE e sto provando a creare un repository personalizzato + controller. Ho configurato il BasePath per essere/api e non riesco a capire come mettere l'URI del Controller personalizzato in modo che sia automaticamente relativo a basePath. C'è qualche pezzo di magia che mi manca?Spring Data REST Controller sotto il percorso di base configurato

Ecco il controller. Ho provato anche tutte le combinazioni degli attributi qui sotto. Ho lasciato i commenti in modo da poter vedere cosa ho provato.

@RepositoryRestController 
// @Controller 
@ExposesResourceFor(AnalystSummaryModel.class) 
// @RequestMapping("/analystsummaries") 
public class AnalystSummaryController { 

    @Autowired 
    AnalystSummaryRepository repository; 

    @Autowired 
    private AnalystSummaryResourceAssembler resourceAssembler; 

    @ResponseBody 
    @RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) 
    public PagedResources<AnalystSummaryModel> getAnalystSummaries(
      final Pageable pageable, 
      final PagedResourcesAssembler assembler) { 
     final Page<AnalystSummaryModel> analystSummaries = repository.findAll(pageable); 
     return assembler.toResource(analystSummaries, resourceAssembler); 
    } 
} 

Ho anche creare un ResourceProcessor basato su un altro question.

Quando osservo l'endpoint/api, compaiono i seguenti:

{ 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080" 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/api/profile" 
    } 
    } 
} 

Quando togliere il commento alla @RequestMapping, Allora ottengo:

{ 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/analystsummaries" 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/api/profile" 
    } 
    } 
} 

Che cosa mi manca per avere la mappatura essere relativo a basePath, che ho impostato in application.yml al seguente?

spring.data.rest.base-path:/api

Qualche informazione in più:

Utilizzando @BasePathAware in realtà si traduce in questo servizio di controllo due URI differenti! Si presenta a/così come/api/analyssummaries (a causa della auto-pluralizzazione, ecc.). Quindi, quando si utilizza ControllerLinkBuilder, utilizza il percorso del primo. Quindi la mia domanda aggiornata è: Perché questo è esposto due volte? Come posso eliminare la radice implicita (poiché non esiste @RequestMapping) e mantenere quella che è sotto/api?

risposta

0

Sbarazzarsi della spring.data.rest.base-path: /api e aggiungere questo:

server.servlet-path: /api 
+0

ho ancora voglia di servire una pagina Reagire sulla radice. Questo non farebbe ascoltare al server solo le cose su/api o sotto? –

+0

'api' sarebbe il prefisso per ogni url. Non hai menzionato la risposta dell'interfaccia utente nella domanda –

+0

Grazie, quindi il tuo approccio non funzionerebbe qui. Ho davvero solo bisogno che i controller SDR siano sotto/api. Secondo la documentazione SDR, sembra che questo dovrebbe funzionare. Ho qualche altra scoperta quando uso @BasePathAware che ho aggiunto alla mia domanda originale –

Problemi correlati