Spring Data Rest,SpringFox和JpaRepository自定义查找程序

时间:2016-11-21 11:08:05

标签: spring swagger spring-data-rest springfox

注意:使用Spring Boot 1.4.2 + SpringFox 2.6.0

嗨,我在我的API文档上通过@RepositoryRestResource遇到了Swagger 2表单的问题。下面的代码工作正常(REST访问OK):

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends JpaRepository<Person, Long> {
    Person findByLastName(@Param("name") String name);
}

HATEOAS链接也是正确的:调用URL / api / people / search 最后得到这个(通知参数“名称”):

{
  "_links": {
    "findByLastName": {
      "href": "http://localhost:8080/api/people/search/findByLastName{?name}",
      "templated": true
    },
    "self": {
      "href": "http://localhost:8080/api/people/search"
    }
  }
}

REST API没问题:URL / api / people / search / findByLastName?name = foobar在使用浏览器执行时返回数据

但是在Swagger中,GET 参数类型被解释为“body”而不是“query”,表单提交(curl ... -d'foobar'...)在404中失败,试图提交“名称”作为请求正文。 所以我尝试明确地设置Swagger,如下所示:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends JpaRepository<Person, Long> {
    @ApiOperation("Find somebody by it's last name")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "name", paramType = "query")
    })
    Person findByLastName(@Param("name") @ApiParam(name = "name") String name);
}

没有任何成功,尽管在这个例子中,“name”在表单中作为参数名称保留得很好: - (

body parameter type on GET query

有谁知道如何使Swagger表格起作用?谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

就是这样:@Param配置Spring Data REST,而@RequestParam适合Swagger

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends JpaRepository<Person, Long> {

    // @Param Spring Data REST : Use @Param or compile with -parameters on JDK 8
    // @RequestParam Swagger : paramType=query cf. $Api*Param

    Person findByLastName(@Param("name") @RequestParam("name") String name);

}

我很高兴!