使用Springfox-Swagger 2自定义Swagger UI中的请求标题描述

plicqrtu  于 2022-11-05  发布在  Spring
关注(0)|答案(4)|浏览(250)

我正在我的Sping Boot 应用程序中使用Springfox Swagger 2版本2.4.0、Springfox Swagger UI版本2.4.0和Swagger注解版本1.5.0。
这里的问题是,我能够为我的控制器的API生成swagger UI,并且我能够测试它。但是我不能为我的请求头指定请求头描述。我使用@RequestHeader注解。
我的控制器API中的代码片段如下所示:
@RequestHeader(name = "Api-Key") String apiKey
请求标题的Swagger UI如下所示:

图像中突出显示的矩形区域表示请求标头的说明。
目前,它只是提取名称属性中提到的数据并显示它。但我想对相同的数据给予不同的描述。例如,“许可证密钥的值”
我怎样才能在Swagger UI中实现这一点,因为@RequestHeader注解只有值、默认值、名称和必需的属性?任何帮助都将不胜感激。
更新:寻找一个开箱即用的解决方案,没有任何我自己的自定义注解

lo8azlld

lo8azlld1#

也许我的答案能帮到一些人。
正如在his answer中提到的Dilip Krishnan,您可以使用io.swagger.annotations.ApiParamio.swagger.annotations.ApiImplicitParam Swagger注解对自定义文档进行微调。
@ApiParam可用于已注册的方法参数。
如果API参数未显式注册,则可以使用@ApiImplicitParam

@RestController
@RequestMapping(value = "/v1/test", produces = "application/json")
@Api(value = "/v1/test")
public class TestController {

    @ApiOperation(value = "Do Something method", tags = "Test method")
    @RequestMapping(value = "/doSomeThing", method = RequestMethod.GET)
    public Foo doSomeThing(
            @ApiParam(value = "Param1 Description", required = true)
            @RequestParam String param) {
        throw new UnsupportedOperationException("do Some Things");
    }

    @ApiOperation(value = "Do Something Another method", tags = "Test method")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "anotherParam1", value = "Another Param1 Description", paramType = "header"),
            @ApiImplicitParam(name = "anotherParam1", value = "Another Param1 Description", paramType = "header")
    })
    @RequestMapping(value = "/doSomeThingAnother", method = RequestMethod.GET)
    public Foo doSomeThingAnother(Bar bar) {
        throw new UnsupportedOperationException("do Some Thing Another");
    }
}

最后你可以看到下面这张图

pwuypxnk

pwuypxnk2#

TL;DR是你必须建立你自己的插件来做这件事。
基本上,在这种情况下,唯一能够增强描述的现成注解是@ApiParam,更准确地说是@ApiImplicitParam
因此,我的建议是:
1.创建您自己的注记,如下所示
@RequestHeader(name = "Api-Key") @Description("Value of license key") String apiKey
注意:已经有一个annotation in spring适用于此。
1.创建您自己的ParameterBuilderPlugin
1.如下所示实现插件

public class Test implements ParameterBuilderPlugin {
  @Override
  public void apply(ParameterContext parameterContext) {
    ResolvedMethodParameter methodParameter =parameterContext.resolvedMethodParameter();
    Optional<Description> requestParam = methodParameter.findAnnotation(Description.class);
    if (requestParam.isPresent()) {
      parameterContext.parameterBuilder()
        .description(requestParam.get().value());
    }
  }

  @Override
  public boolean supports(DocumentationType documentationType) {
    return false;
  }
}

1.拾取在处理了Swagger标注之后应用的顺序值。
另外,请将您的springfox库升级到latest version

v09wglhw

v09wglhw3#

我们遇到了同样的问题,并通过以下方式解决了该问题:

.. @RequestHeader(value = "..") @ApiParam(value = "Description") String param ..

这个想法是在生成的swagger中添加“描述”字段。它可能看起来很笨拙,但它是一个快速简单的解决方案,在你的个人情况下可能很有用。

xlpyo6sf

xlpyo6sf4#

快速、简单有效的解决方案是使用enum,例如:

@RequestHeader(value = "someval") ALLOWED_VALUES input

private enum ALLOWED_VALUES {A, B, C};

下面将显示出昂首阔步:可用值:A, B, C

相关问题