You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过注解让Swagger将自定义序列化类识别为字符串类型

解决Swagger将自定义MonthUtil类识别为字符串的问题

你之前尝试用@ApiParam没效果是因为这个注解是用来标注请求参数(比如接口方法里的@RequestParam参数)的,而模型类的字段需要用专门的模型注解来指定Swagger的类型映射。下面给你几个可行的方案:

方案1:给字段/Getter标注模型类型注解

根据你使用的Swagger版本选择对应的注解:

  • 如果是Swagger 3.x(OpenAPI 3规范),用@Schema注解:
import io.swagger.v3.oas.annotations.media.Schema;

public class YourRestApiModel {
    // 直接在字段上标注,或者在getter方法上标注都可以
    @Schema(type = "string", example = "2024-06") // 可以加示例值方便前端理解
    private MonthUtil targetMonth;

    public MonthUtil getTargetMonth() {
        return targetMonth;
    }
}
  • 如果是Swagger 2.x,用@ApiModelProperty注解:
import io.swagger.annotations.ApiModelProperty;

public class YourRestApiModel {
    @ApiModelProperty(dataType = "string", example = "2024-06")
    private MonthUtil targetMonth;

    // getter...
}

这个方法最直接,适合单个字段或少量模型类的场景。

方案2:全局配置ModelConverter(所有MonthUtil都自动识别为字符串)

如果你有很多模型类用到了MonthUtil,不想逐个加注解,可以实现Swagger的ModelConverter接口,全局把MonthUtil类型映射为字符串类型:

import io.swagger.v3.oas.models.media.StringSchema;
import io.swagger.v3.core.converter.ModelConverter;
import io.swagger.v3.core.converter.ModelConverterContext;
import io.swagger.v3.core.converter.AnnotatedType;
import org.springframework.stereotype.Component;
import java.util.Iterator;

@Component
public class MonthUtilSwaggerConverter implements ModelConverter {
    @Override
    public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterator<ModelConverter> chain) {
        // 判断当前处理的类型是否是MonthUtil
        if (type.getType() instanceof Class && MonthUtil.class.isAssignableFrom((Class<?>) type.getType())) {
            StringSchema stringSchema = new StringSchema();
            stringSchema.setExample("2024-06"); // 设置示例值
            return stringSchema;
        }
        // 不是MonthUtil的话,交给后续转换器处理
        return chain.hasNext() ? chain.next().resolve(type, context, chain) : null;
    }
}

把这个类注册为Spring Bean(比如加@Component),Swagger扫描到后就会自动处理所有MonthUtil类型的字段,统一显示为字符串。

方案3:结合Jackson的类型信息(可选)

如果你已经用Jackson的自定义序列化器/反序列化器把MonthUtil转成字符串,也可以让Swagger复用Jackson的类型映射。比如在MonthUtil类上直接标注@Schema(type = "string"),这样所有引用这个类的地方都会自动识别:

@Schema(type = "string", example = "2024-06")
public class MonthUtil {
    // 你的类逻辑...
}

这个方法适合希望从类本身定义Swagger类型的场景。


内容的提问来源于stack exchange,提问作者Alex R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:51:54