带有Swagger的文档QueryDSL端点

Mar*_*arx 5 querydsl spring-data-jpa swagger spring-data-rest springfox

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

但是Swagger仅定义变量:页面,大小,排序-似乎没有解析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));
    }
Run Code Online (Sandbox Code Playgroud)

}

我希望Swagger将所有String字段显示为过滤器,尤其是严格定义的状态和收件人。

小智 0

定义一些虚拟参数并将所有查询参数添加为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);
}
Run Code Online (Sandbox Code Playgroud)