【发布时间】:2019-01-22 13:50:50
【问题描述】:
我有一个带有两个端点的控制器类
@RestController
@RequestMapping
public class TestController {
@RequestMapping(
value= "/test",
method = RequestMethod.GET)
@ResponseBody
public String getTest() {
return "test without params";
}
@RequestMapping(
value= "/test",
params = {"param"},
method = RequestMethod.GET)
@ResponseBody
public String getTest(@PathParam("param") int param) {
return "test with param";
}
}
一个有参数,一个没有,两者都起作用。
如果我使用 curl 或 Web 浏览器来访问端点
返回
无参数测试
和
返回
用参数测试
但是swagger ui只显示没有参数的那个。
如果我将带有参数的请求的请求映射中的值更改为
@RequestMapping(
value= "/testbyparam",
params = {"param"},
method = RequestMethod.GET)
Swagger UI 正确显示两个端点,但我不希望根据 swagger 将显示或不显示什么来定义我的端点。
我有什么方法可以让 swagger ui 正确显示具有匹配值但参数不同的端点?
编辑澄清:
端点工作得很好; /test 和 /test?param=1 都可以正常工作,问题是 swagger-ui 不会显示它们。
我希望 swagger ui 显示我定义的端点,但如果不能,那么我将不得不忍受 swagger-ui 缺少我的一些端点。
参考编辑:
这里回答的人:Proper REST formatted URL with date ranges
明确表示不要用斜杠分隔查询字符串
他们还说“查询字符串之前不应该有斜线。”
【问题讨论】:
-
虽然 Spring 可以处理这两个请求映射,但 Swagger 仍然认为它们不明确,并且只会显示它们。如果我没记错的话,Spring 最近才能够处理这些问题(但我使用了各种各样的 spring 版本,所以我可能是错的。)
-
等等,很抱歉,你能澄清一下你想要什么。您是否期待 QUERY PARAMS(您声明)或 PATH PARAMS(您已编码)查询参数:GET /test 和 GET /test?param=1 路径参数:GET /test 和 GET /test/1
-
我想我可能误解了两者的区别,但听起来我想要路径参数。我编码的就是我想要的;我拥有的端点是我想要保留的端点。如果冷冻豌豆的罗迪是正确的,并且这是 Swagger 当前的限制,那么我将坚持当前的路径变量,不再担心 Swagger。
-
URL 路径中显示路径参数:/test/123 查询字符串中显示查询参数:/test?param=123。您在上面提供的代码使用
@PathParam,这是一个路径参数,但您的描述是指查询参数(将使用@RequestParam。请说明您期望的行为 -
这很重要,因为您尝试做的事情可以使用路径参数,
/test和/test/123是不同的路由,但不是使用查询参数,尽管有比什么更干净的方法来做它们你有上面。
标签: spring spring-boot swagger