[已解决] graceful-response导致swagger2无法访问默认页面

一.问题描述

        今天我在搭框架的时候看到了一个可以帮忙自动统一返回格式的插件,我心想这个好用啊,我就直接放入了我现在项目的框架中,心想美滋滋,后面我又引入了swagger,自动生成接口文档,这省了好多工作量,但是配置swagger后请求默认地址/swagger-ui.html时一直报错,一直弹框显示无法访问,就像下图这样

 二.解决方式

        先来说下graceful-response这个插件,他是扫描所有的接口返回变成他规定的json的格式,就是这样

{
  "status": {
    "code": "0",
    "msg": "ok"
  },
  "payload": {
    
  }
}

 swagger请求连接本身是根据配置的swagger对象,将这个对象通过json格式返回,通过页面渲染出来的,swagger需要的格式是这样的

{
    "swagger": "2.0",
    "info": {
      "description": "",
      "version": "1.0.0",
      "title": "",
      "termsOfService": "Terms of service",
      "contact": {
        "name": "name"
      },
      "license": {

      }
    },
    "host": "localhost:8080",
    "basePath": "/drone"
  }

 所以本来要返回成这个格式的swagger的json,被graceful-response变成了这样

{
  "status": {
    "code": "0",
    "msg": "ok"
  },
  "payload": {
    "swagger": "2.0",
    "info": {
      "description": "",
      "version": "1.0.0",
      "title": "",
      "termsOfService": "Terms of service",
      "contact": {
        "name": "name"
      },
      "license": {

      }
    },
    "host": "localhost:8080",
    "basePath": "/drone"
  }
}

所以加载不出来swagger在线文档页面。

好的原因找到了,怎么解决呢?

查看graceful-response官方文档找到答案(https://doc.feiniaojin.com/graceful-response/home.html): 

在从 3.2.0版本开始,提供了两种方式实现controller方法例外排除。

2.1单个方法例外排除

针对某个Controller方法,我们可以添加@ExcludeFromGracefulResponse注解,声明该方法不需要进行统一的包装。

/**
 * @author lihao3
 * @date 2023/6/30 10:10
 */
@Api("用户相关接口")
@Slf4j
@RestController
@RequestMapping("system/user")
@RequiredArgsConstructor
public class SysUserController {

  private final SysUserService service;

  @ApiOperation("删除")
  @DeleteMapping("{id}")
  @ExcludeFromGracefulResponse
  public String delete(@PathVariable Long id) {
    service.delete(id);
    return "删除成功";
  }

}

这样配置就会直接返回"删除成功",不再进行统一返回值的封装。 

2.2 包级别的例外处理

用户可以通过配置graceful-response.exclude-packages,声明某些包需要跳过不进行处理。

该配置项支持*和**,例如

graceful-response:
  exclude-packages:
    - com.lizhiadmin.pro.module.*

该配置表明com.lizhiadmin.pro.module包下的所有controller均不会被Graceful Response进行自动处理。

这里我们采用第二种方式在配置文件中加入

graceful-response:
  exclude-packages:
    - springfox.**

重启服务发现已经可以访问swagger文档啦。如果还不可以访问的话就需要看看你的swagger是否配置正确啦

以上是我解决这个问题的过程,希望可以帮到你,我是一个天天写bug的程序员,一起成长进步吧!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值