如何为 ApiModelProperty 在 swagger 上设置 POJO 数据

Posted

技术标签:

【中文标题】如何为 ApiModelProperty 在 swagger 上设置 POJO 数据【英文标题】:How to set POJO Data on swagger for ApiModelProperty 【发布时间】:2022-01-03 03:15:48 【问题描述】:

我的端点有以下 ApiModel -

public class CreateConfigRequest 
    @ApiModelProperty(example = "hive")
    String entityType;
    @ApiModelProperty(example = "imports")
    String entityNamespace;
    @ApiModelProperty(example = "hotel")
    String entityName;
    @ApiModelProperty(example = "\"name\": \"hotel\", \"batch\": \"type\": \"FullScan\"")
    JobConfig content;

JobConfig 是另一个 pojo 类。代码如下:

@Data
public class JobConfig 
    @NonNull private String name;
    @NonNull private BatchSpec batch;
    private ProfileConfig profile;
    private ValidateConfig validate;
    private ActionConfig action;

我的大摇大摆看起来像 -

这基本上是POJO的结构。

应该是什么样子 -

基本上,我希望了解如何将其设置为默认 JSON 结构。

【问题讨论】:

你能添加JobConfig的代码吗?谢谢! 添加了相同的代码。 【参考方案1】:

如果您不想在 JSON 中包含 profilevalidateaction,您可以简单地使用 @JsonIgnore,如下所示:

@Data
public class JobConfig 
    @NonNull private String name;
    @NonNull private BatchSpec batch;

    @JsonIgnore
    private ProfileConfig profile;

    @JsonIgnore
    private ValidateConfig validate;

    @JsonIgnore
    private ActionConfig action;

如果您只是不想在 Swagger 文档中列出它们,可以使用@ApiModelProperty,如下所示:

@Data
public class JobConfig 
    @NonNull private String name;
    @NonNull private BatchSpec batch;

    @ApiModelProperty(hidden = true)
    private ProfileConfig profile;

    @ApiModelProperty(hidden = true)
    private ValidateConfig validate;

    @ApiModelProperty(hidden = true)
    private ActionConfig action;


鉴于您不想隐藏属性而是显示更真实的示例,请尝试以下操作:

@Data
public class JobConfig 
    @NonNull 
    @ApiModelProperty(example = "hotel")
    private String name;

    @NonNull 
    private BatchSpec batch;

    private ProfileConfig profile;

    private ValidateConfig validate;

    private ActionConfig action;

@Data
public class BatchSpec 
    @ApiModelProperty(example = "FullScan")
    private String type;

【讨论】:

我不想完全隐藏它,现在它显示的是默认结构。我想创建一个对象并大摇大摆地展示它。 对不起,我没有关注你。那你想什么时候不显示? 现在,如果您在图像中看到,它显示“字符串”。我想在那里放一个合理的值,所以创建一个我选择的 jobConfig 对象,然后大摇大摆地展示它。 现在我明白你的意思了。 @ApiModelProperty(example = ) 应该这样做,但我想说你需要在 JobConfig 以及 BatchSpecProfileConfigValidateConfigActionConfig 属性中注释每个属性。 感谢您的回复,如果您看到我有@ApiModelProperty(example = "\"name\": \"hotel\", \"batch\": \"type\": \"FullScan\"") 但它不反映任何内容。这也只接受字符串,我不知道如何在这里给它一个变量。

以上是关于如何为 ApiModelProperty 在 swagger 上设置 POJO 数据的主要内容,如果未能解决你的问题,请参考以下文章

@ApiModel和@ApiModelProperty用法

Swagger @ApiModelProperty示例值为null为Long

springboot @ApiModelProperty()注解

entity类中用@ApiModelProperty注解啥意思

entity类中用@ApiModelProperty注解啥意思?

Swagger中配置了@ApiModelProperty的allowableValues属性但不显示的问题