在 Dropwizard 中为 swagger.json 中的定义生成 snakecase 格式

Generation of snakecase format for definitions in swagger.json in Dropwizard

我正在为我们的项目使用 dropwizard 框架,在该项目中我使用 @JsonSnakeCase 注释将格式从 CamelCase 转换为 snake_case。但是当我尝试使用 swagger 注释生成 swagger.json 时,它会生成 CamelCase 中的定义。我需要设置 swagger 中的任何配置,以将属性格式从 CamelCase 更改为 snake_case 吗?

我的模型class:

@Data
@JsonSnakeCase

public class ServiceRequest {
 @NotNull
 private Long categoryId;

 @NotNull @NotEmpty
 private String serviceName;

 @NotNull @NotEmpty
 private String serviceDesc;

private boolean isRootService;
private Long parentServiceId;

private String imageLink;
private String imageDescription;
private String videoLink;
private String serviceHelpText;

}

这就是 swagger.json 的生成方式

"ServiceRequest": {
        "type": "object",
        "required": [
            "categoryId",
            "serviceDesc",
            "serviceName"
        ],
        "properties": {
            "categoryId": {
                "type": "integer",
                "format": "int64"
            },
            "serviceName": {
                "type": "string"
            },
            "serviceDesc": {
                "type": "string"
            },
            "parentServiceId": {
                "type": "integer",
                "format": "int64"
            },
            "imageLink": {
                "type": "string"
            },
            "imageDescription": {
                "type": "string"
            },
            "videoLink": {
                "type": "string"
            },
            "serviceHelpText": {
                "type": "string"
            },
            "rootService": {
                "type": "boolean",
                "default": false
            }
        }
    },

Swagger 的默认 ObjectMapper 不考虑这一点。您可以指定自己的映射器以供 swagger 用于模型转换。

ObjectMapper converter = new ObjectMapper();
converter.setPropertyNamingStrategy(
    PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
ModelConverters.getInstance().addConverter(new ModelResolver(converter));

仅供参考 ModelConverterSwagger 核心的单例。所以这可能会影响所有使用它的地方。