如何禁止swagger-codegen转换java.io.InputStream等类型为自定义模型
解决方法
.swagger-codegen-ignore 仅用于跳过生成指定的代码文件,无法干预类型映射逻辑,因此不能解决类型被自动转换为自定义model的问题,你可以通过以下两种方案实现原生类型保留:
方案1:配置typeMapping与importMapping(推荐)
该配置会直接告知代码生成器遇到匹配类型时直接引用指定的全限定类名,不会自动生成自定义Model,逻辑和Swagger原生识别springframework.http包类的逻辑一致。
- 如果你使用Maven插件执行生成,在
swagger-codegen-maven-plugin的configuration节点下添加如下配置:
<configOptions> <typeMapping> InputStream=java.io.InputStream, JsonNode=com.fasterxml.jackson.databind.JsonNode, InputStreamResource=org.springframework.core.io.InputStreamResource </typeMapping> <importMapping> InputStream=java.io.InputStream, JsonNode=com.fasterxml.jackson.databind.JsonNode, InputStreamResource=org.springframework.core.io.InputStreamResource </importMapping> </configOptions>
- 如果你使用命令行执行生成,在启动命令中添加如下参数即可:
swagger-codegen generate \ -i your-spec.yaml \ -l java \ -o ./output \ --type-mapping InputStream=java.io.InputStream,JsonNode=com.fasterxml.jackson.databind.JsonNode,InputStreamResource=org.springframework.core.io.InputStreamResource \ --import-mapping InputStream=java.io.InputStream,JsonNode=com.fasterxml.jackson.databind.JsonNode,InputStreamResource=org.springframework.core.io.InputStreamResource
方案2:在OpenAPI规范中添加扩展属性
如果你使用的是OpenAPI 3.x规范,可以直接在对应接口的返回Schema中添加x-class扩展属性,明确指定要引用的原生类:
paths: /your/api/path: get: responses: '200': content: application/octet-stream: schema: type: string format: binary x-class: java.io.InputStream
注意事项
- 配置前确认类名拼写正确,你提到的
InputStreamRecource为拼写错误,正确类名为org.springframework.core.io.InputStreamResource,拼写不一致会导致配置不生效。 - 上述配置完全兼容流的处理逻辑,不会将流转换为byte数组,保留了流避免内存溢出的优势。
内容的提问来源于stack exchange,提问作者Bestows In Constructing
相关产品推荐
相关产品推荐

