springfox字符串列表,显示为枚举列表

时间:2019-12-18 10:25:00

标签: java enums swagger swagger-ui springfox

我试图在Swagger-ui中将String列表显示为枚举列表。

这是简化的Spring控制器代码:

    @GetMapping(path = "/{name}", produces = MediaType.APPLICATION_JSON_VALUE)
    public DomainInfoResponseDto info(
            @RequestHeader(name = ContextInfoDtoConverter.EXTENSIONS_HEADER, required = false)
            Set<@EnumValidator(enumClass = EppExtensionVersion.class, message = ErrorValidatorConstants.UNKNOWN_EXTENSION) String> extensions) {

        //...
    }

这段代码产生了以下醒目的文档:

   "/v1/domains/{name}": {
      "get": {
        "tags": [
          "domain-epp-object-registry-controller"
        ],
        "summary": "Get information on a Domain object",
        "operationId": "infoUsingGET_1",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "Extensions",
            "in": "header",
            "description": "Extensions possible",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            },
            "collectionFormat": "multi",
            "enum": [
              "RGP_V1",
              "TEST_V1"
            ]
          },

但是如果我用Set<EppExtensionVersion> extensions((EppExtensionVersion是一个Java枚举)替换了控制器中的扩展参数的类型),那么swagger doc就会变成:

   "/v1/domains/{name}": {
      "get": {
        "tags": [
          "domain-epp-object-registry-controller"
        ],
        "summary": "Get information on a Domain object",
        "operationId": "infoUsingGET_1",
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "Extensions",
            "in": "header",
            "description": "Extensions possible",
            "required": false,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "RGP_V1",
                "TEST_V1"
              ] 
            },
            "collectionFormat": "multi",
            "enum": [
              "RGP_V1",
              "TEST_V1"
            ]
          },

重要的部分是enum字段中的附加items字段。 这使swagger-ui会显示一个填充有允许值的组合列表,而不是空白字段的列表。

问题是,我不想在控制器中使用Java枚举集而不是字符串集,但是我想大张旗鼓地将其显示为枚举集。

您有实现的任何想法吗?我已经尝试了很多醒目的注解,但似乎没有任何效果。

0 个答案:

没有答案
相关问题