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

使用content-disposition:attachment时如何在Swagger 2中预览API的JSON响应

问题根因

你在全局CORS过滤器中为所有响应统一添加了Content-Disposition: attachment; filename="file.json"响应头,该响应头会强制客户端将响应内容作为文件下载,运行在浏览器中的Swagger UI也会遵循该规则,因此不会直接预览JSON内容,只会展示下载按钮。

可行解决方案

这里提供两种可直接落地的方案,你可以根据实际业务场景选择:

  • 方案一:调整全局过滤器逻辑,仅为非Swagger请求添加下载头
    适配你既需要普通客户端请求触发下载,又需要Swagger页面可预览的场景,修改过滤器的头设置逻辑即可:
    private void setHeaders(HttpServletResponse response, HttpServletRequest request){
        // 匹配Swagger相关请求特征
        String requestUri = request.getRequestURI();
        String referer = request.getHeader("Referer");
        boolean isSwaggerRelatedRequest = 
                // 匹配Swagger接口文档请求
                requestUri.contains("/v2/api-docs") 
                || requestUri.contains("/swagger-resources") 
                // 匹配Swagger UI页面发起的接口调用请求
                || (referer != null && referer.contains("/swagger-ui.html"));
        // 非Swagger请求才添加下载头
        if (!isSwaggerRelatedRequest) {
            response.setHeader("Content-Disposition", "attachment; filename=\"file.json\"");
        }
    }
    
  • 方案二:移除全局下载头配置,仅在需要下载的场景单独设置
    如果你的接口默认不需要强制客户端下载,只是部分场景需要触发下载行为,可以直接把Content-Disposition的设置逻辑从全局CORS过滤器中移除,仅在对应需要下载的接口代码中单独设置该响应头即可。该方案更符合常规接口设计规范,Swagger默认会自动渲染所有application/json类型的响应内容。

注意:你的接口已经配置了produces = MediaType.APPLICATION_JSON_UTF8_VALUE,只要去掉强制下载的响应头,Swagger UI会自动识别JSON格式并做格式化预览,不需要额外修改其他Swagger配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:54:04