Есть ли способ проверки параметров метода в методах репозитория spring-data-rest? - PullRequest
0 голосов
/ 21 октября 2018

Например, у меня есть класс хранилища, подобный этому.

@RepositoryRestResource
public interface FooRepository extends JpaRepository<Foo, Integer> {

  Optional<Foo> findByBarId(@Param("barId") Integer barId);

}

Это создает конечную точку поиска с путем http://hostname/foo/search/findByBarId{?fooId}

Когда я получаю доступ к этому URL без каких-либо параметров, я получаю404 что я думаю, все в порядке.

Однако я бы скорее отправил 400 для этого типа или ошибок, поскольку моему бизнесу определенно понадобится параметр для этого API.

Я пытался использовать @javax.validation.constraints.NotNull

Optional<Foo> findByBarId(@Param("barId") @NotNull Integer barId);

, а также @org.springframework.lang.NonNull

Optional<Foo> findByBarId(@Param("barId") @NonNull Integer barId);

Обе аннотации не работали.Конечно, это не работает, потому что эти аннотации сами по себе являются лишь метаинформацией, которая не принимается во внимание Spring-Framework.

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

Есть ли какой-нибудь прямой способ, которым я могу достичь такого поведения?

Я использую spring-boot 2.0.4, если это поможет.

1 Ответ

0 голосов
/ 21 октября 2018

Вы можете написать RepositoryRestController , чтобы запустить конкретный бизнес для настройки конечных точек.

Вот пример для вашего случая, вы также можете настроить его:

@RepositoryRestController
public class FooController {

    FooRepository fooRepository;

    @Autowired
    public FooController(FooRepository fooRepository) {
        this.fooRepository = fooRepository;
    }

    @GetMapping(path = "/foo")
    public ResponseEntity getfoo(@RequestParam("barId") Optional<Integer> barId) {
        if (!barId.isPresent()) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
        }

        Optional<Foo> foo = fooRepository.findByBarId(barId.get());

        return ResponseEntity.ok(foo);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...