黑马给的起步代码基础工程版本是springboot2.x 我的电脑用的是JDK21 springboot3.x 所以第一天整了很长时间 需要慢慢修改配置环境
目录
依赖版本更换
springboot版本更换
mybatis版本更换
lombok版本更换
数据库依赖更新(很重要)
swagger配置问题
代码补全
父工程sky-take-out的pom文件添加
spring-boot-starter-parent
org.springframework.boot
3.4.0
注意 这里最后改为3.3.5 原因后面说明 涉及到swagger那一块的内容
3.0.4
1.18.30
这里我用的是springboot默认的数据库连接池 没用德鲁伊数据库连接池
做到这里会有报错信息提示没有提供Maven依赖mysql:mysql-connector-java的版本信息
找到的原因在于spring-boot-starter-parent 2.7.18版本中 就无法使用mysql-connector-java作为依赖了 坐标已经更新 新坐标为
com.mysql
mysql-connector-j
这里参考了文章:
mysql-connector-java 和 mysql-connector-j的区别_mysql-connector-java mysql-connector-j-CSDN博客
这个其实是官方更新的 为了依赖配置更加规范和一致 貌似需求MySQL版本为8.0.31及之后
这个我是在sky-server的pom文件中直接改的
com.mysql
mysql-connector-j
runtime
黑马提供的knife4j的坐标太老了 根本不适配3.x的springboot
4.5.0
# 这个是改父pom中的版本号
com.github.xiaoymin
knife4j-openapi3-jakarta-spring-boot-starter
${knife4j}
# 依赖坐标也要改 更新了 包括父依赖 子模块中pom文件的对应依赖也要修改
# 直接在idea中ctrl+f查一下knife4j把对应的坐标快速改一下就行
当然 如果你使用的是3.4.0的springboot 改到这里还是运行不起来 访问api文档页面会报错 而且控制台会输出error信息
java.lang.NoSuchMethodError
问题在于knife4j好像还匹配不了springboot3.4.0 里面有构造方法的区别
所以前面要把springboot版本改为3.3.5
这里参考了文章:
knife4j+springboot3.4异常无法正确展示文档_knife4j文档请求异常 cannot read properties of undefined -CSDN博客
对应的注解修改
@ApiModelProperty->@Schema
@ApiModel0>@Schema
@Api->@Tag(name=" ",description=" ")
@ApiOperation(value=" ")->@Operation(summary=" ")
黑马视频中设置的几个配置的新写法
@Bean
public OpenAPI openAPI(){
return new OpenAPI().info(new Info()
.title("苍穹外卖项目接口文档")
.description("苍穹外卖项目接口文档")
.version("2.0"));
}
在yml文件中需要配置:
# springdoc-openapi项目配置
springdoc:
swagger-ui:
#自定义swagger前端请求路径,输入http:localhost:8080/swagger-ui.html会自动重定向到swagger页面
path: /swagger-ui.html
tags-sorter: alpha
operations-sorter: alpha
api-docs:
path: /v3/api-docs #swagger后端请求地址
enabled: true #是否开启文档功能
group-configs:
- group: 'default' #分组名称
paths-to-match: '/**' #配置需要匹配的路径,默认为/**
packages-to-scan: com.sky.controller #配置要扫描包的路径,一般配置到启动类所在的包名
# knife4j的增强配置,不需要增强可以不配(建议配置一下)
knife4j:
enable: true #开启knife4j,无需添加@EnableKnife4j注解
setting:
language: zh_cn #中文
swagger-model-name: 实体类列表 #重命名SwaggerModel名称,默认
对应的类的修改
/**
* 员工管理
*/
@Tag(name = "EmployeeController 员工管理接口", description = "员工相关接口")
@RestController
@RequestMapping("/admin/employee")
@Slf4j
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@Autowired
private JwtProperties jwtProperties;
/**
* 登录
*
* @param employeeLoginDTO
* @return
*/
@PostMapping("/login")
@Operation(summary = "员工登录方法")
public Result login(@RequestBody EmployeeLoginDTO employeeLoginDTO) {
log.info("员工登录:{}", employeeLoginDTO);
Employee employee = employeeService.login(employeeLoginDTO);
//登录成功后,生成jwt令牌
Map claims = new HashMap<>();
claims.put(JwtClaimsConstant.EMP_ID, employee.getId());
String token = JwtUtil.createJWT(
jwtProperties.getAdminSecretKey(),
jwtProperties.getAdminTtl(),
claims);
EmployeeLoginVO employeeLoginVO = EmployeeLoginVO.builder()
.id(employee.getId())
.userName(employee.getUsername())
.name(employee.getName())
.token(token)
.build();
return Result.success(employeeLoginVO);
}
/**
* 退出
*
* @return
*/
@PostMapping("/logout")
@Operation(summary = "员工退出方法")
public Result logout() {
return Result.success();
}
}
@Data
@Schema(description = "员工登录时传递的数据模型")
public class EmployeeLoginDTO implements Serializable {
@Schema(description = "用户名")
private String username;
@Schema(description = "密码")
private String password;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "员工登录返回的数据格式")
public class EmployeeLoginVO implements Serializable {
@Schema(description = "主键值")
private Long id;
@Schema(description = "用户名")
private String userName;
@Schema(description = "姓名")
private String name;
@Schema(description = "jwt令牌")
private String token;
}
这里参考了文章:
Springboot 3整合Knife4j(Swagger3、OpenApi3)_knife4j springboot3-CSDN博客
这个部分略 跟着视频写或者自己写就行了 第一天的代码补全内容很简单