Неоднозначные методы-обработчики при попытке создать универсальные остальные API-контроллеры - PullRequest
0 голосов
/ 11 октября 2019

В моем приложении довольно много репозиториев, и нам нужны конечные точки 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.

Какправильно переопределить реализацию по умолчанию?

...