当前位置: 首页 > 知识库问答 >
问题:

如何将@ApiModelProperty数据类型设置为字符串以用于Swagger文档

池兴邦
2023-03-14

我正在使用Spring MVC(通过Spring Boot),并使用Swigger Spring MVC库集成了Swigger API文档。

我有一个类看起来像这样:

@ApiModel
public class CartItem {
    ...
    private Money listPrice; // joda money class

    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty(required = true, dataType = "java.lang.String")
    public Money getListPrice() {
        return listPrice;
    }
    ...
}

因为我在这个字段中使用ToString序列化程序,所以它会返回listPrice。换句话说,JSON中的toString:

{
    "listPrice": "USD 10.50"
}

然而,swagger文档并不支持dataType=“java.lang.String”。它将响应模型显示为:

"CartItem": {
    "description": "",
    "id": "CartItem",
    "properties": {
        "listPrice": {
            "required": false,
            "type": "Money"
        }
    }
}

我已经尝试将@ApiModelProperty注释放在字段和方法上,在这两种情况下,必需字段都被尊重,但dataType字段被忽略。我还尝试为dataType使用"String"、"string"和"java.lang.String",但都不起作用。

是我遗漏了什么,还是这只是Swigger spring mvc库中的一个bug?

共有3个答案

田巴英
2023-03-14
@ApiModel
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Model {
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonProperty("myDate")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private final LocalDateTime myDateTime;

}
贾实
2023-03-14

对于OpenApi(Swagger 3.0)和SpringDoc,可以使用以下全局配置。

static {
     SpringDocUtils.getConfig().replaceWithSchema(Money.class, new StringSchema());
}
柳德义
2023-03-14

原来dataType在当前版本的Swagger Spring MVC库中被完全忽略了。我在这里找到了关于它的简短讨论:

https://github.com/springfox/springfox/issues/602

看起来它可以包括在版本2一旦出来。

编辑:尽管版本2说它支持数据类型,但目前似乎不起作用。为了满足我的需求,更好的方法是使用直接模型替换配置文档设置,如下所示:

@Bean
public Docket swaggerSpringMvcPlugin() {
    return new Docket(DocumentationType.SWAGGER_2)
            .directModelSubstitute(Money.class, String.class);
}
 类似资料:
  • 我有一个枚举,我想让这些枚举类型在开关情况下成为字符串。 因此,在上面我硬编码“Mon”,而不是有一种方法,我们可以直接将枚举类型作为字符串。就目前而言,如果我在交换机案例中传递枚举类型,我将获得id 0、1或2,但我需要Mon/Tue/Wed作为字符串

  • 我想将String转换为子类数据类型,如何才能做到?或者这是可能的? 我有一个抽象类帐户 公共抽象类SinAcct扩展了Acct 一个公共类SavAcct扩展了SinAcct 在SavAcct中,有一个构造函数 一个抽象类合并帐户扩展帐户 我想要一个新的SavAcct, 新的SavAcct(数组[1],数组[2],数组[3],Double.parse双(数组[4]) 但它是错误的构造函数SavAc

  • 希望在Spring API网关上实现一个代理来记录请求/响应。我为传入的请求和传出的响应定义了自己的过滤器。 请求网关筛选器: 没有一个工作... 有什么想法或可能的方法来解决这个“得到身体”的问题?

  • 问题内容: 我正在使用poi 3.6 我能够正确创建Excel。但是,当我尝试将单元格类型设置为number时,它总是为我提供常规的单元格类型。 即在新创建的excel中,当我右键单击并设置单元格格式->我总是发现数字是General。 我的代码是这样的 您能建议一下这里缺少什么吗? 问题答案: 您也可以尝试这种方法: 当然,请查看有关数据格式的文档和示例。

  • 字符串也是一种序列,因此,通用的序列操作,比如索引,分片,加法,乘法等对它同样适用。比如: >>> s = 'hello, ' >>> s[0] # 索引 'h' >>> s[1:3] # 分片 'el' >>> s + 'world' # 加法 'hello, world' >>> s * 2 # 乘法 'hello, hell

  • 我在我的项目中使用Spring Boot Spring数据Postgresql Kotlin。 默认情况下,JPA对字符串字段使用varchar(255),因此我需要为我的所有字符串列添加@Col列(列定义="TEXT")。 当我不添加@Column时,有什么方法可以将文本设置为默认字符串?