Как я могу переопределить метод Spring Data REST, не отключая реализации по умолчанию - PullRequest
0 голосов
/ 27 апреля 2020

Я наконец нашел способ переопределить методы Spring Data REST с помощью пользовательской реализации. К сожалению, это отключает обработку по умолчанию.

Мой репозиторий должен содержать findAll и findById, отображаемые над GET: /games и GET: /games/{id} соответственно, и save не должен экспортироваться, поскольку он переопределяется контроллером .

@RepositoryRestResource(path = "games", exported = true)
public interface GameRepository extends Repository<Game, UUID> {
    Collection<Game> findAll();

    Game findById(UUID id);

    @RestResource(exported = false)
    Game save(Game game);
}

Мой контроллер должен обработать POST: /games, сгенерировать игру на сервере и вернуть сохраненную игру.

@RepositoryRestController
@ExposesResourceFor(Game.class)
@RequestMapping("games")
public class CustomGameController {
    private final GameService gameService;

    public CustomGameController(GameService gameService) {
        this.gameService = gameService;
    }

    @ResponseBody
    @RequestMapping(value = "", method = RequestMethod.POST, produces = "application/hal+json")
    public PersistentEntityResource generateNewGame(@RequestBody CreateGameDTO createGameDTO, PersistentEntityResourceAssembler assembler) {
        Game game = gameService.generateNewGame(createGameDTO);
        return assembler.toFullResource(game);
    }

}

Однако, когда я пытаюсь GET: /games, он возвращает 405: Method Not Allowed но POST: /games работает как задумано. Когда я изменяю значение отображения generateNewGame на "new", все три запроса работают. Но POST: /games/new не является RESTful URL Layout, и я бы предпочел его избежать. Я не понимаю, почему у меня такое поведение и как я могу его решить. У кого-нибудь есть подсказка?

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