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?
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? –
'api' będzie prefiksem dla każdego adresu URL. Nie wspomniałeś o tym, jak reagować z ui w pytaniu –
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 –