如何使SwaggerUI显示类似的SpringBoot REST端点?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (109)

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

@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浏览器来命中端点

http://localhost:8081/test

返回

测试没有参数

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

返回

用param测试

如果我使用参数to更改请求的请求映射中的值

  @RequestMapping(
          value= "/testbyparam",
          params = {"param"},
          method = RequestMethod.GET)

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

有没有什么方法让我能够通过匹配值正确显示端点,但不同参数?

提问于
用户回答回答于

如果你想拥有PATH参数,例如GET /testGET /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";
  }

如果你需要查询参数(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";
    }
  }
用户回答回答于

试着将Param包括在路径中,如下所示。

@GetMapping("/test/{param}")
public String getTest(@PathVariable final int param) {
    return "test with param";
}

扫码关注云+社区

领取腾讯云代金券