gpt4 book ai didi

Spring Data Rest、SpringFox 和 JpaRepository 自定义查找器

转载 作者:行者123 更新时间:2023-12-02 02:49:03 27 4
gpt4 key购买 nike

注意:使用 Spring Boot 1.4.2 + SpringFox 2.6.0

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

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

HATEOAS 链接也正确:调用 URL/api/people/search最终结果如下(注意参数“name”):

{
"_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 表单正常工作?感谢您的帮助

最佳答案

就是这样:@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);

}

我很高兴!

关于Spring Data Rest、SpringFox 和 JpaRepository 自定义查找器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40718680/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com