2016-01-13 29 views
6

Używam Spring Boot 1.3.1.RELEASE i próbuję utworzyć niestandardowy kontroler Repository +. Skonfigurowałem basePath jako be/api i nie mogę wymyślić, w jaki sposób umieścić niestandardowy identyfikator URI kontrolera, aby był automatycznie względny względem basePath. Czy brakuje mi jakiejś magii?Kontroler danych REST sprężyny w skonfigurowanej ścieżce podstawowej

Oto kontroler. Próbowałem również każdej kombinacji poniższych atrybutów. Zostawiłem w komentarzach, żebyś mógł zobaczyć, co próbowałem.

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

ja również utworzyć ResourceProcessor opartą na innym question.

Kiedy zobaczyć końcowy/API, widzę następujące:

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

Kiedy odkomentuj @RequestMapping, to wtedy otrzymamy:

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

Co mi brakuje mieć mapowanie być w stosunku do basePath, które ustawiłem w application.yml na następujące?

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

Niektórzy więcej informacji:

Korzystanie @BasePathAware faktycznie skutkuje tym usługi kontrolera dwa różne URI! Pojawia się w/jak również/api/analystSummaries (z powodu automatycznego pluralizowania itp.). Następnie przy użyciu ControllerLinkBuilder używa ścieżki pierwszego. Tak więc moje zaktualizowane pytanie brzmi: Dlaczego jest to narażone dwa razy? Jak mogę wyeliminować niejawny root (ponieważ nie ma @RequestMapping) i zachować ten, który jest pod/api?

Odpowiedz

0

Pozbądź spring.data.rest.base-path: /api i dodać to:

server.servlet-path: /api 
+0

Nadal chcę służyć React stronę na root. Czy to nie sprawi, że serwer będzie słuchał tylko rzeczy na/api lub poniżej? –

+0

'api' będzie prefiksem dla każdego adresu URL. Nie wspomniałeś o tym, jak reagować z ui w pytaniu –

+0

Dzięki, twoje podejście nie zadziałałoby tutaj. Naprawdę potrzebuję kontrolerów SDR, aby były pod/api. Zgodnie z dokumentacją SDR brzmi to tak, jak powinno działać. Mam inne znalezisko podczas używania @BasePathAware, które dodałem do mojego pierwotnego pytania –