Прерывистая проблема RestRepositoryController 404 с Spring Boot 1.5.10? - PullRequest
0 голосов
/ 13 ноября 2018

У меня странная проблема с загрузкой Spring и одним контроллером.

Я полагаю, что это связано с конфликтом с другим контроллером с аналогичным названием (более новая версия)

Структура выглядит так

 controllers
    -v2
       -PartController(@RestController)
    -v1
       -PartController(@RepositoryRestController)
 repositories
    -v2
       -PartRepository(@Repository)
    -v1
       -PartRepository(@RepositoryRestResource(path = "/part"))

Причина этого в том, что мы внедряем уровень обслуживания и хотим отойти от репозиториев Restful. Поэтому v1 будет в конечном итоге удалено.

Однако при запуске службы исходные методы хранилища иногда не отображаются (недетерминированные). В других случаях это работает, при проверке чванства. Это правильный результат при просмотре на сваггере

Правильные конечные точки

enter image description here

Неправильные конечные точки (базовые методы jpa)

enter image description here

v1 PartController

@RepositoryRestController
public class PartController {

... more code

v1 PartRepository

@CrossOrigin
@RepositoryRestResource(path = "/part")
public interface PartRepository extends JpaRepository<Part, Long> {

... more code

v2 PartController

@RestController("PartController2")
@RequestMapping(path = "/api/v2", name = "PartController2")
public class PartController implements PartsApi {

@RequestMapping(
      method = RequestMethod.POST,
      path = "/parts/usage/")
    @Override
    public List<PartResponse> getPartUsage(@RequestBody final                          List<PartUsageRequest> request) {
    return this.service.getPartUsage(request);
  }

v2 PartRepository

@Repository("PartRepository2")
public interface PartRepository extends CrudRepository<Part, Long> {

  Optional<Part> findById(Long id);

}

Обратите внимание, что новая конечная точка работает независимо от другой

enter image description here

Как упоминалось выше, эта доступность конечных точек случайна. Может ли это быть состояние гонки, когда Spring boot отображает каждый контроллер при запуске?

Это совершенно случайная, повторная очистка или чистка службы могут работать по назначению. После повторного запуска эти конечные точки на /parts недоступны, что вызывает 404

Весна Версия: 1.5.10.RELEASE

Springfox (Swagger): 2.8.0

1 Ответ

0 голосов
/ 14 ноября 2018

Мне удалось воспроизвести вашу проблему в проверочном проекте. Это потому, что у вас есть несколько хранилищ для одной и той же сущности (в вашем случае Part).

См. этот запрос на изменение для получения дополнительной информации. Единственное отличие состоит в том, что у вас есть @Repository, а не @RepositoryRestResource(exported = false) во втором хранилище, но это не имеет значения, результат тот же: ресурс экспортируется примерно в 50% случаев.

Единственный обходной путь, который я вижу: избавиться от второго хранилища.

Этот вопрос тоже интересен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...