苍穹外卖(Springboot3实现) day01

黑马给的起步代码基础工程版本是springboot2.x 我的电脑用的是JDK21 springboot3.x 所以第一天整了很长时间 需要慢慢修改配置环境

目录

依赖版本更换

springboot版本更换

mybatis版本更换

lombok版本更换

数据库依赖更新(很重要)

swagger配置问题

代码补全


依赖版本更换

springboot版本更换

父工程sky-take-out的pom文件添加


    spring-boot-starter-parent
    org.springframework.boot
    3.4.0

注意 这里最后改为3.3.5 原因后面说明 涉及到swagger那一块的内容

mybatis版本更换

3.0.4

lombok版本更换

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

swagger配置问题

黑马提供的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博客

代码补全

这个部分略 跟着视频写或者自己写就行了 第一天的代码补全内容很简单

你可能感兴趣的:(苍穹外卖学习,spring,spring,boot,java)