解决springBoot整合knife4j报错的问题

依赖:

<!--引入knife4j依赖-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>

knife4j配置文件:
package com.example.family.Configuration;


import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2//Swagger3版本使用这个注解
public class Knife4jConfiguration {


/*引入Knife4j提供的扩展类*/
private final OpenApiExtensionResolver openApiExtensionResolver;

@Autowired
public Knife4jConfiguration(OpenApiExtensionResolver openApiExtensionResolver) {
this.openApiExtensionResolver = openApiExtensionResolver;
}

@Bean(value = "defaultApi2")
public Docket userApi() {
String groupName = "用户管理API";
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName(groupName)
.select()
//在设置的包下的会生效
.apis(RequestHandlerSelectors.basePackage("com.example.family.Controller.UserController"))
//只有标注了ApiOperation的方法才会生效
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build()
//赋予插件体系
.extensions(openApiExtensionResolver.buildExtensions(groupName));

}

@Bean(value = "defaultApi3")
public Docket testApi() {
String groupName = "测试API";
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName(groupName)
.select()
//在设置的包下的会生效
.apis(RequestHandlerSelectors.basePackage("com.example.family.Controller.Test"))
//只有标注了ApiOperation的方法才会生效
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build()
//赋予插件体系
.extensions(openApiExtensionResolver.buildExtensions(groupName));

}

private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("family后台服务API")
.description("整合knife4j搭建的后台服务API接口文档")
.contact(new Contact("减肥", null, "1442884413@qq.com"))
.termsOfServiceUrl("http://localhost:8080/")
.version("1.0.0")
.build();
}
}
controller层:
package com.example.family.Controller.UserController;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.example.family.DAO.UserDAO;
import com.example.family.DTO.UserQueryDTo;
import com.example.family.Pojo.User;
import com.example.family.ResponseDTO.Result;
import com.example.family.ResponseDTO.ResultEntry;
import com.example.family.ResponseDTO.ResultEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@Api(tags = "用户管理")
@RequestMapping("user")
public class UserController {

@Autowired
UserDAO userDAO;

@ApiOperation("查询用户")
@GetMapping("search")
public Result<List<User>> test1(UserQueryDTo dto){
User user = new User();
BeanUtil.copyProperties(dto,user, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
Example<User> example = Example.of(user);
return ResultEntry.error(userDAO.findAll(example), ResultEnum.RESULT_NOT_EXIST);
}

}



报错信息:Unable to scan documentation context default  java.lang.NullPointerException: null

出错原因:将类中的属性设置为了public类型

解决办法:将public删除或者改为private就可以啦

posted @   自信且66  阅读(3612)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示