我想知道如何以夸张的方式记录枚举。
根据JavaDoc
dataType。有关支持的数据类型,请参阅文档。如果数据类型是自定义对象,请设置其名称,或者不设置任何名称。如果使用枚举字符串'和枚举常量的allowableValues。
但我没有找到一些好的Java示例如何真正使用它,规范是here。
package betlista.tests.swagger;
import betlista.tests.swagger.model.Input;
import betlista.tests.swagger.model.Output;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
@Api(value = "first", position = 1)
public class RestServiceFirst {
@ApiOperation(value = "foo1 operation", httpMethod = "POST", position = 1, nickname = "foo")
public void foo1(Input input) {
}
@ApiOperation(value = "bar1 operation", response = Output.class, httpMethod = "GET", position = 2, nickname = "bar")
public Output bar1() {
return null;
}
}
package betlista.tests.swagger;
import betlista.tests.swagger.model.Input;
import betlista.tests.swagger.model.Output;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
@Api(value = "second", position = 2)
public class RestServiceSecond {
@ApiOperation(value = "foo2 operation", httpMethod = "POST", position = 1)
public void foo2(Input input) {
}
@ApiOperation(value = "bar2 operation", response = Output.class, httpMethod = "GET", position = 2)
public Output bar2() {
return null;
}
}
package betlista.tests.swagger.model;
import com.wordnik.swagger.annotations.ApiModel;
import com.wordnik.swagger.annotations.ApiModelProperty;
@ApiModel
public class Input {
@ApiModelProperty(dataType = "string", allowableValues = "M, T", value = "description", notes = "notes")
public Day day;
}
package betlista.tests.swagger.model;
public enum Day {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday;
}
package betlista.tests.swagger.model;
import com.wordnik.swagger.annotations.ApiModel;
@ApiModel(value = "Output")
public class Output {
@ApiModelProperty
String field;
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>betlista</groupId>
<artifactId>tests-swagger</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- generate REST documentation -->
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jaxrs_2.10</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.github.kongchen</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<apiSources>
<apiSource>
<locations>betlista.tests.swagger;betlista.tests.swagger.model</locations>
<apiVersion>1.0.0</apiVersion>
<basePath>http://localhost:port/rest</basePath>
<outputTemplate>${basedir}/strapdown.html.mustache</outputTemplate>
<outputPath>${basedir}/target/generated/strapdown.html</outputPath>
<swaggerDirectory>${basedir}/target/generated/apidocs</swaggerDirectory>
<useOutputFlatStructure>false</useOutputFlatStructure>
</apiSource>
</apiSources>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
您可以看到结果here。
我看到HTML输出中存在很多问题(缺少输出描述,错误的URL,描述用于注释),但我不知道如何克服的是枚举用法。
在tests-swagger\target\generated\apidocs\first.json
中应该(我认为)
"models" : {
"Input" : {
"id" : "Input",
"description" : "",
"properties" : {
"day" : {
"type" : "string",
"enum" : [ "M", " T" ]
}
}
}
}
但是有
"models" : {
"Input" : {
"id" : "Input",
"description" : "",
"properties" : {
"day" : {
"$ref" : "Day",
"enum" : [ "M", " T" ]
}
}
}
}
我觉得$ref
是个问题......
有什么想法吗?
答案 0 :(得分:12)
对于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" ]
}
}
}
}
这就是模型在SwaggerUI中的呈现方式:
Input {
day (string, optional) = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
}
答案 1 :(得分:6)
根据您指出的文件:
dataType。有关支持的数据类型,请参阅文档。如果数据类型是自定义对象,请设置其名称,或者不设置任何名称。 如果使用枚举字符串&#39;和enum常量的allowableValues。
我认为你应该手动添加枚举值:
@ApiModel
public class Input {
@ApiModelProperty(dataType = "string", allowableValues = "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday", value = "description", notes = "notes")
public Day day;
}
答案 2 :(得分:3)
自定义Springfox插件解决方案:
swagger.io建议:“如果需要为枚举项指定描述,则可以在参数或属性的描述中进行”
我根据专有的 @ApiEnum注释实施了此建议。该库位于此处:https://github.com/hoereth/springfox-enum-plugin
答案 3 :(得分:1)
在OpenApi版本Swagger 2.x中,您需要使用此处描述的新注释: https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations
@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;
...
...
答案 4 :(得分:0)
您可以将responseContainer与@ApiOperation注释一起使用:
@ApiOperation(value = "Brief description of your operation.", response = YourEnum.class, responseContainer = "List")
答案 5 :(得分:-2)
感谢您的帮助。
我已经在我的代码中习惯了这种类型。
private String date;
@ApiModelProperty(dataType = "string", allowableValues = "FirstValue, SecondValue", value = "description", notes = "notes")
private CarrierType carrierName;
public enum CarrierType {
FirstValue,
SecondValue
}
这对我来说很好。