如何让 Swagger UI 显示类似的 Spring Boot REST 端点?

Dam*_*ien 5 spring swagger spring-boot

我有一个带有两个端点的控制器类

@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";
  }

}
Run Code Online (Sandbox Code Playgroud)

一种有参数,一种没有,两者都有效。

如果我使用curl或网络浏览器来访问端点

http://localhost:8081/测试

回报

无参数测试

http://localhost:8081/test?param=1

回报

用参数测试

但 swagger ui 仅显示不带参数的用户界面。

如果我将带有参数的请求的请求映射中的值更改为

  @RequestMapping(
          value= "/testbyparam",
          params = {"param"},
          method = RequestMethod.GET)
Run Code Online (Sandbox Code Playgroud)

Swagger UI 正确显示两个端点,但我不想根据 swagger 将显示或不会显示的内容来定义我的端点。

有什么方法可以让 swagger ui 正确显示具有匹配值但参数不同的端点?

编辑澄清:

端点工作得很好;/test 和 /test?param=1 都工作得很好,问题是 swagger-ui 不会显示它们。

我希望 swagger ui 显示我定义的端点,但如果不能,那么我就只能忍受 swagger-ui 缺少一些端点。

编辑参考:

在这里回答的人:Proper REST formatted URL with date range

明确表示不要用斜杠分隔查询字符串

他们还说“查询字符串之前不应该有斜杠”。

Ben*_*n M -1

我不清楚你到底想做什么,但我会给出两个解决方案:

如果你想要 PATH 参数,例如GET /test&GET /test/123你可以这样做:

  @GetMapping("/test")
  public String getTest() {
    return "test without params";
  }

  @GetMapping("test/{param}")
  public String getTest(@PathVariable("param") int param) {
    return "test with param";
  }
Run Code Online (Sandbox Code Playgroud)

如果您需要查询参数(GET /testGET /test?param=123),那么您需要一个带有可选参数的端点:

  @GetMapping("test")
  public String getTest(@RequestParam("param") Integer param) {
    if(param == null) { 
      return "test without params";
    } else {
      return "test with param";
    }
  }
Run Code Online (Sandbox Code Playgroud)