价值等级

时间:2017-01-08 11:18:17

标签: scala playframework swagger

我尝试使用Swagger Play2 Module为Play应用程序生成api文档。我们使用了许多值类来获得一些额外的类型安全性和代码可读性。

其中一个操作为案例类生成JSON,如下所示:

case class MyResponse(prop1: MyValueType, prop2: MyValueType)

其中MyValueType是这样的值类:

case class MyValueType(value: String)

格式化为JSON,就像使用自定义Format[T]的字符串一样。

Swagger UI生成示例JSON代码,如下所示:

{
  "prop1": {
      "value": "string"
  },
  "prop2": {
      "value": "string"
  }
}

虽然我希望它能够产生这个:

{
  "prop1": "string",
  "prop2": "string"
} 

我尝试过这样的自定义注释,但这似乎不起作用:

case class MyResponse(
  @ApiModelProperty(dataType="string") prop1: MyValueType, 
  @ApiModelProperty(dataType="string") prop2: MyValueType, 
)

有关如何完成此任务的任何提示?

3 个答案:

答案 0 :(得分:1)

尝试使用大写

的dataType =“String”

答案 1 :(得分:0)

Swagger将case class MyValueType包裹在case class MyResponse

它忽略了您的dataType注释,仍在解析MyValueType

您是否尝试使用更完整的属性注释?类似的东西:

case class MyResponse(@ApiModelProperty(
                          value = "Property 1",
                          dataType="string") prop1: MyValueType, 
                      @ApiModelProperty(
                          value = "Property 2",
                          dataType="string") prop2: MyValueType)

顺便说一下,Swagger中的数据类型不区分大小写,因此string等同于String

答案 2 :(得分:0)

我尝试过 @ApiModelProperty(dataType = "String")@ApiModelProperty(dataType = "string"),但它们都不起作用。

@ApiModelProperty(dataType = "java.lang.String") 对我有用。

我的 springfox 版本:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
</dependency>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
</dependency>