Java 昂首阔步

Java 昂首阔步,java,swagger,swagger-maven-plugin,Java,Swagger,Swagger Maven Plugin,我想知道如何在swagger中记录枚举 据 数据类型。有关支持的数据类型,请参阅文档。如果数据类型是自定义对象,请设置其名称或不设置任何内容。如果是枚举,请为枚举常量使用“字符串”和AllowableValue 但我并没有找到一些好的Java示例如何真正使用它,规范是 JAVA 第一次服务 二次服务 输入 白天 输出 pom.xml 4.0.0 贝特里斯塔 在HTML输出中我看到了很多问题(缺少输出描述、错误的URL、说明用于注释),但我不知道如何克服的一个问题是枚举的使用 在测试中,swa

我想知道如何在swagger中记录枚举

数据类型。有关支持的数据类型,请参阅文档。如果数据类型是自定义对象,请设置其名称或不设置任何内容。如果是枚举,请为枚举常量使用“字符串”和AllowableValue

但我并没有找到一些好的Java示例如何真正使用它,规范是

JAVA 第一次服务 二次服务 输入 白天 输出 pom.xml

4.0.0
贝特里斯塔

在HTML输出中我看到了很多问题(缺少输出描述、错误的URL、说明用于注释),但我不知道如何克服的一个问题是枚举的使用

测试中,swagger\target\generated\apidocs\first.json
应该是(我认为)

但是有

  "models" : {
    "Input" : {
      "id" : "Input",
      "description" : "",
      "properties" : {
        "day" : {
          "$ref" : "Day",
          "enum" : [ "M", " T" ]
        }
      }
    }
  }
我认为,
$ref
是个问题


有什么想法吗?

根据你指的文件:

数据类型。有关支持的数据类型,请参阅文档。如果数据类型是自定义对象,请设置其名称或不设置任何内容如果是枚举,请为枚举常量使用“字符串”和AllowableValue。

我认为您应该手动添加枚举值:

@ApiModel
public class Input {

    @ApiModelProperty(dataType = "string", allowableValues = "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday", value = "description", notes = "notes")
    public Day day;
}

对于swagger maven plugin 3.1.0,这可能是一个最低限度的文档:

@ApiModel
public class Input {
    @ApiModelProperty
    public Day day;
}

@ApiModel
public enum Day {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday;
}
这就是生成的json模型:

"definitions" : {
  "Input" : {
    "type" : "object",
    "properties" : {
      "day" : {
        "type" : "string",
        "enum" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
      }
    }
  }
}
这就是模型在招摇过市中的表现方式:

Input {
day (string, optional) = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
}
谢谢你的帮助

我在代码中已经习惯了这种类型

private String date;
@ApiModelProperty(dataType = "string", allowableValues = "FirstValue,   SecondValue", value = "description", notes = "notes")
private CarrierType carrierName;


public enum CarrierType {
    FirstValue,
    SecondValue
}

它对我来说工作正常。

您可以将responseContainer与@ApiOperation注释一起使用:

@ApiOperation(value = "Brief description of your operation.", response = YourEnum.class, responseContainer = "List")

自定义Springfox插件解决方案:

swagger.io建议:“如果需要指定枚举项的说明,可以在参数或属性的说明中执行此操作”


我基于专有的@ApiEnum注释实现了这一建议。该库在此处可用:

在OpenApi版本Swagger 2.x中,您需要使用此处描述的新注释:

结果是这样的:

很抱歉错过了一节课,我增加了
Day
class。是的,它是类,但如何在文档中获得可用值?我想在文档中的某个地方看到,周一、周二、周三、周四、周五、周六、周日将出现一个值
。请参阅此处的第二篇文章:这是一个维护噩梦,因为您将枚举值作为字符串进行移植。任何对枚举的修改,开发人员都必须记住更改注释中的字符串。我正在使用camel-swagger插件,并发现使用@ApiModelProperty(dataType=“string”)注释枚举属性,从而允许swagger json模型正确填充枚举类型。
@ApiModel
public class Input {

    @ApiModelProperty(dataType = "string", allowableValues = "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday", value = "description", notes = "notes")
    public Day day;
}
@ApiModel
public class Input {
    @ApiModelProperty
    public Day day;
}

@ApiModel
public enum Day {
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday;
}
"definitions" : {
  "Input" : {
    "type" : "object",
    "properties" : {
      "day" : {
        "type" : "string",
        "enum" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ]
      }
    }
  }
}
Input {
day (string, optional) = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
}
private String date;
@ApiModelProperty(dataType = "string", allowableValues = "FirstValue,   SecondValue", value = "description", notes = "notes")
private CarrierType carrierName;


public enum CarrierType {
    FirstValue,
    SecondValue
}
@ApiOperation(value = "Brief description of your operation.", response = YourEnum.class, responseContainer = "List")
@Schema(description = "Shuttle shipment action")
public class ShuttleShipmentAction {

   @Schema(required = true, description = "Id of a shuttle shipments")
   private long id;

   @Schema(required = true, description = "Action to be performed on shuttle shipments", allowableValues = { "SEND",
        "AUTHORIZE", "REJECT", "FIX_TRAINRUN", "UNFIX_TRAINRUN", "DELETE" })
   private String action;
   ...
   ...