如何通过Swagger Java注解生成additionalProperties:{}或true配置?
解决方案
场景1:使用Swagger 3.x / OpenAPI 3 注解(对应io.swagger.v3.oas.annotations包)
直接在Map字段上追加@Schema注解配置即可,示例代码如下:
import io.swagger.v3.oas.annotations.media.Schema; import java.util.Map; class Test { @ApiModelProperty(value="something") private String name; @ApiModelProperty(value="something") @Schema(additionalProperties = Schema.AdditionalPropertiesValue.TRUE) private Map<String, Object> mapple; }
上述配置生成的yaml会显示additionalProperties: true,如果需要生成additionalProperties: {},将属性值调整为Schema.AdditionalPropertiesValue.EMPTY即可。
场景2:使用旧版Swagger 1.x/2.x 注解(对应io.swagger.annotations包)
旧版@ApiModelProperty没有直接提供additionalProperties的配置参数,可选用以下两种方法实现:
- 方法1:去掉Map的泛型参数,直接声明为原始类型的Map,示例:
class Test { @ApiModelProperty(value="something") private String name; @ApiModelProperty(value="something") private Map mapple; }
绝大多数Swagger 2版本解析无泛型的Map类型时,会默认生成additionalProperties: true。
- 方法2:通过注解的扩展属性配置,以Springfox框架为例,追加extensions配置即可:
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.Extension; import io.swagger.annotations.ExtensionProperty; import java.util.Map; class Test { @ApiModelProperty(value="something") private String name; @ApiModelProperty( value="something", extensions = @Extension(properties = @ExtensionProperty(name = "additionalProperties", value = "true")) ) private Map<String, Object> mapple; }
额外说明
- 你贴出的生成yaml里的
additionalPropeties属于拼写错误,正确字段名为additionalProperties,如果是框架自动生成的拼写错误,建议升级Swagger/Springfox依赖到最新稳定版即可修复。 - 你给出的示例Java代码存在语法问题:
Private首字母大写应为小写private,Map<string,object>的泛型参数首字母应大写为Map<String,Object>,建议先修正语法问题再验证注解配置。
内容的提问来源于stack exchange,提问作者Bhushan Chaudhary
相关产品推荐
相关产品推荐

