В моем приложении довольно много репозиториев, и нам нужны конечные точки REST для них. Из-за определенных требований реализация Spring-data-rest по умолчанию неэффективна, и поэтому я хотел написать свою собственную реализацию. Изначально я начал с написания контроллера для каждой из моих сущностей, например:
@RepositoryRestController
@RequestMapping("/myEntity")
@ExposesResourceFor(MyEntity.class)
public class MyEntityResource {
@GetMapping(value = "", produces = MediaTypes.HAL_JSON_VALUE)
public ResponseEntity getResult(@RequestParam final MultiValueMap<String, String> parameters) throws IllegalAccessException {
// my logic
}
}
Написание этого кода для всех остальных конечных точек, связанных с репозиториями, кажется большой работой, и поэтому я думал о написанииуниверсальный контроллер для всех репозиториев, берущих идеи из RepositoryEntityController
. Поэтому я создал контроллер, подобный
@RepositoryRestController
public class ApiResource {
@GetMapping(value = "/{repository}", produces = MediaTypes.HAL_JSON_VALUE)
public ResponseEntity getResult(@QuerydslPredicate RootResourceInformation resourceInformation, @PathVariable String repository) throws IllegalAccessException {
// my logic
}
}
Это почти то же самое, как определяется RepositoryEntityController#getCollectionResource
, но это выдает исключение Ambiguous handler methods mapped for '/api/v1/myEntity'
, указывающее мой метод и метод RepositoryEntityController#getCollectionResource
.
Какправильно переопределить реализацию по умолчанию?