当前位置: 首页 > 知识库问答 >
问题:

如何让Swagger UI显示类似的Spring Boot RESTendpoint?

柳逸春
2023-03-14

我有一个具有两个endpoint的控制器类

@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浏览器访问endpoint

http://localhost:8081/test

返回

无参数测试

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

返回

参数测试

但是,swagger ui只显示没有参数的用户界面。

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

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

Swagger UI可以正确显示两个endpoint,但是我不想根据swagger将显示或不显示的内容来定义我的endpoint。

我有没有办法让swagger ui正确显示具有匹配值但参数不同的endpoint?

编辑澄清:

endpoint工作得非常好/测试和/或测试?param=1两者都能完美工作,问题是swagger ui不会显示它们。

我想让swagger ui显示我定义的endpoint,但是如果它不能,那么我只能忍受swagger ui缺少我的一些endpoint。

参照编辑:

回答这里的人:正确的REST格式的URL和日期范围

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

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

共有3个答案

奚光霁
2023-03-14

尝试在路径中包含参数,如下所示。

@GetMapping("/test/{param}")
public String getTest(@PathVariable final int param) {
    return "test with param";
}
杭涵映
2023-03-14

在阅读澄清后,这里的问题是swagger-ui正在做正确的事情。

您有两个控制器endpoint,但它们用于相同的RESOURCE/test,该endpoint采用一组可选的查询参数。

实际上,具有相同方法GET)和请求映射(/test)的所有映射控制器endpoint都表示一个逻辑资源。获取test资源上的操作,以及一组可能影响调用该操作结果的可选参数。

将其实现为两个独立的控制器终结点的事实是一个实现细节,并且不会改变可以对单个/test资源进行操作的事实。

在swagger UI中将其列为两个独立的endpoint,而不是带有可选参数的单个endpoint,这对API的使用者有什么好处?也许它可以约束允许的有效查询参数集(如果设置?foo,则必须设置

郭彬郁
2023-03-14

问题在于您的请求映射中,第二个方法声明将覆盖第一个方法。因为资源映射值是相同的。

尝试将第二种方法更改为下面。因为你想在QueryParam而不是path变量中输入,所以你应该使用@recestParam而不是@PathParam。

请注意,您必须给出/test/,以便告诉Spring您的映射没有歧义。希望能有帮助。

@RequestMapping(
          value= "/test/",
          method = RequestMethod.GET)
  @ResponseBody
  public String getTest (@RequestParam("param") int param) {
    return "test with param"+param;
  }
 类似资料:
  • 问题内容: 我有一个位于JButton顶部的JLabel,但它不会显示在顶部。注释掉JButton的代码后,将显示JLabel,这意味着它在其中,但在底部。有没有办法在JButton的顶部显示JLabel? 任何帮助都是极好的。谢谢! 编辑: 为了澄清起见,我需要在游戏中使用该按钮,单击该按钮时,按钮上方会显示一个JLabel,以显示添加的“得分”。在我的游戏中,JLabel将比JButton小,

  • 对于类似字符串的列具有以下列: 虽然这些肯定是有用的,但了解任何给定列中是否有空值以及有多少空值也是非常重要的。 虽然我可以求助于编写自定义函数来找到它,但这将是一个巨大的额外开销。请注意,有一个相关的问题,但主要关注数字列,因此不直接适用:如何计算DataFrame中列中的NaN值。那么,是否还有另一个助手函数可以提供这些附加信息呢?

  • 我尝试过构建本机用户界面组件,但通常是成功或失败的。该组件似乎没有以react-本机呈现。 不过,对于这个问题,我特别尝试在react-native中渲染一个Android片段,但没有显示任何内容。示例代码: 使用上面的视图管理器,视图应该在的地方甚至没有被涂成白色,这意味着框架布局本身没有被渲染。 我做错了什么?

  • SwaggerUI 汉化版;修改了部分样式;结合SpringFox SpringFox-Swagger-UI实现API管理

  • 我的类别表设计如下 我有三个级别的类别 < li >父项 < li >孩子 < li >子系 如何以下列方式显示它们? (SELECT*From类别):我得到以下数组,如下所示

  • 我正在使用openapi生成器maven插件从YAML文档生成代码。 以下是我如何配置maven插件以生成接口: 这个插件工作得很好,我得到这样的界面 我正在用这个类实现我的接口: 我已经检查了解决方案,当我执行api调用时,我得到了HTTP状态200,但是当我尝试访问swagger ui页面时,这个apiendpoint没有被记录。有没有办法配置OpenAPI UI或SwaggerUI以指向我的