Документируйте конечную точку querydsl с помощью swagger

Я использую Spring Boot Data, QueryDSL и Swagger. Я определил конечную точку так:

@GetMapping
public ResponseEntity<?> listOfThings(
        @PageableDefault(size = 20, sort = "uID", direction = Sort.Direction.DESC) final Pageable pageable,
        @QuerydslPredicate(root = Thing.class) final Predicate predicate)

Однако Swagger определяет только переменные: page, size, sort - похоже, он не анализирует Entity, чтобы показать все поля как фильтруемые.

У меня такой репозиторий:

@Repository
public interface ThingRepository
        extends JpaSpecificationExecutor<Thing>, CrudRepository<Thing, String>, PagingAndSortingRepository<Thing, String>,
        QuerydslPredicateExecutor<Thing>, QuerydslBinderCustomizer<QThing>
{
    @Override
    default void customize(final QuerydslBindings bindings, final QThing thing)
    {
        bindings.bind(thing.status).first((status, value) -> status.eq(value));
        bindings.bind(thing.recipient).first(StringExpression::containsIgnoreCase);
        bindings.bind(String.class).first((StringPath path, String value) -> path.containsIgnoreCase(value));
    }

}

Я ожидаю, что Swagger отобразит все поля String как фильтры, особенно статус и получатель, которые строго определены.

У меня аналогичное требование. Удалось найти решение?

Maz 26.11.2018 02:19

к сожалению нет

Marx 26.11.2018 09:30

у меня есть аналогичные потребности, ничего не упоминается в их документации: s

dzgeek 16.03.2020 22:22

Я пришел сюда в поисках решения, но, к сожалению, у нас его еще нет!

Pravin Kalekar 04.06.2020 05:00
5
4
1 040
1

Ответы 1

Определите некоторые фиктивные параметры и добавьте все параметры запроса как RequestParams, но не используйте их ... просто используйте предикат. Мы используем это как обходной путь для поддержки файла swagger для генерации кода. Не идеально, но работает!

public Iterable<SCGameInfo> findSCGameInfo(
  @QuerydslPredicate(root = GameInfo.class) Predicate predicate,
  @RequestParam(name= "gameName",required = false) String gameName,
  @RequestParam(name= "vendor",required = false) String vendor
){
 return  scService.findAllGameInfosForPredicate(predicate);
}

Я нахожу лучшее решение. Вы можете использовать @Parameter(description = "filter",hidden = true) на вашем @QuerydslPredicate. И аннотация @Parameter для вашего метода конечной точки. пример

loljeene 01.09.2020 11:22

Другие вопросы по теме