【springdoc】springdoc和springboot3.4.1不兼容导致的swagger无法正常访问问题

springdoc和springboot3.4.1不兼容导致的swagger无法正常访问问题

前言

公司的新架构使用了springdoc和springboot3.4.1,接口文档想使用swagger进行接口文档的管理,但是启动之后swagger文档无法正常展示访问,提示了GenericResponseService第693行左右无法创建ControllerAdviceBean的实例,或者是创建ControllerAdviceBean时参数不正确。

问题原因

springboot 3.4.1的ControllerAdviceBean类的构造方法删除了原先的
ControllerAdviceBean(String beanName, @Nullable BeanFactory beanFactory) 构造方法,
只提供了新的
ControllerAdviceBean(String beanName, BeanFactory beanFactory, ControllerAdvice controllerAdvice) 构造方法,这里springdoc旧的GenericResponseService类无法正常调用ControllerAdviceBean的构造方法导致了问题的出现。

解决方案

在自己的源代码中新建同GenericResponseService类的包与类覆盖springdoc的类,将原有的692行
controllerAdviceInfosNotInThisBean的获取
的获取改为

            List<ControllerAdviceInfo> controllerAdviceInfosNotInThisBean = controllerAdviceInfos.stream()
                    .filter(controllerAdviceInfo -> {
                        // 解決springdoc不兼容springboot3.4.1问题
                        if (controllerAdviceInfo.getControllerAdvice() instanceof ControllerAdvice controllerAdvice) {
                            return new ControllerAdviceBean(controllerAdvice.name(), propertyResolverUtils.getFactory(), controllerAdvice).isApplicableToBeanType(beanType);
                        }else {
                            return false;
                        }
                    })
                    .filter(controllerAdviceInfo -> !beanType.equals(controllerAdviceInfo.getControllerAdvice().getClass()))
                    .toList();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值