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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:40:12