如何修改Swagger.io OpenAPI V3.0默认响应媒体类型为application/json?
修改OpenAPI V3.0默认响应媒体类型为application/json
首先说明:你要调整的是OpenAPI生成器的默认配置,MapStruct是负责对象映射的工具,和OpenAPI的媒体类型设置无关。下面是几种批量修改的可行方案:
方案一:Spring Boot环境下全局配置(Springdoc OpenAPI)
如果用Springdoc集成OpenAPI,直接在配置文件里全局设置默认的请求/响应媒体类型即可,无需修改任何注解:
在application.properties中添加:
springdoc.default-produces-media-type=application/json springdoc.default-consumes-media-type=application/json
或者用YAML格式的application.yml:
springdoc: default-produces-media-type: application/json default-consumes-media-type: application/json
配置后,所有未手动指定mediaType的@ApiResponse都会默认使用application/json。
方案二:自定义OpenAPI配置类实现全局替换
如果需要更灵活的控制逻辑,可以编写配置类遍历所有接口响应,自动替换媒体类型:
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.Content; import io.swagger.v3.oas.models.media.MediaType; import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.oas.models.responses.ApiResponses; import org.springdoc.core.customizers.OpenApiCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OpenApiConfig { @Bean public OpenApiCustomizer customizeDefaultResponseMediaType() { return openApi -> { openApi.getPaths().values().forEach(pathItem -> { pathItem.readOperations().forEach(operation -> { ApiResponses apiResponses = operation.getResponses(); apiResponses.values().forEach(apiResponse -> { // 针对未指定内容或使用*/*的响应,替换为application/json if (apiResponse.getContent() == null || apiResponse.getContent().containsKey("*/*")) { Content content = new Content(); MediaType mediaType = new MediaType(); // 保留原响应的schema(如果有) mediaType.setSchema(apiResponse.getContent() != null ? apiResponse.getContent().get("*/*").getSchema() : null); content.addMediaType("application/json", mediaType); apiResponse.setContent(content); } }); }); }); }; } }
方案三:调整OpenAPI Generator插件配置(Maven/Gradle)
如果是通过Maven或Gradle插件生成代码,可以直接在插件配置里指定默认的produces媒体类型:
Maven插件示例:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>6.6.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/src/main/resources/openapi.yaml</inputSpec> <generatorName>spring</generatorName> <configOptions> <defaultProduces>application/json</defaultProduces> <defaultConsumes>application/json</defaultConsumes> </configOptions> </configuration> </execution> </executions> </plugin>
Gradle插件示例:
openapiGenerate { generatorName = "spring" inputSpec = "$rootDir/src/main/resources/openapi.yaml".toString() configOptions = [ defaultProduces: "application/json", defaultConsumes: "application/json" ] }
配置后生成的代码中,所有响应的默认媒体类型都会自动设为application/json。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

