【踩坑汇总】基于RuoYi-Vue快速开发&&接口404 NOT FOUND解决方案

背景

笔者之前已经有用若依生成器生成系统管理下的二级子目录的经验,当时的做法很简单,只需要把生成代码各部分放入原项目指定位置,即:

  • 后端的controller层放入ruoyi-admin(因为原项目结构里面admin里面是controller,其他子模块里面没有)
  • domain、mapper、service放入ruoyi-system下的对应包(因为它属于系统管理部分)
  • xml文件放入ruoyi-system下的resources.mapper.system(因为它对应的是系统管理下的模块)
  • 前端Vue的api和views放入ruoyi-ui同名包的相应位置。目录组织结构与其他组件保持一致。
  • 将.sql文件导入数据库。它的作用是插入菜单项。

但是后来笔者想在后端单独新建一个模块,不想依附于ruoyi-system,前端也是设立独立的一级菜单。再在一级菜单下新建多个自己的子模块。于是就有了今天这篇文章。

接下来我将会讲讲我的相关配置。

相关配置

配置生成代码选项

  • 在ry数据库中新建数据库表,也可以将别的数据库表结构复制过去
  • 建议修改ruoyi-generator模块的generator.yml的相关配置
  • 启动项目,找到代码生成的选项,填入生成代码的设置。

如果是想单独弄一个模块,那包名就不要用默认的system,而是自定义。

  • 下载并解压生成的代码

项目模块配置

笔者从这一步中了解到了多模块开发的相关知识。

如果一个项目下有多个子模块,那么在总项目下的pom文件是这样的的:

<modules>
    <module>模块1,自行替换</module>
    ...
    <module>模块n,自行替换</module>
</modules>
<packaging>pom</packaging>

表示这个项目包含了这些模块。

而在每一个子模块中,用:

<parent>
    <artifactId>此处自行替换</artifactId>
    <groupId>此处自行替换</groupId>
    <version>版本号</version>
</parent>

来表示它的父模块是谁。

子模块也可以用其他的子模块作为依赖。

springboot对模块的管理机制使得在子模块中,不再需要显式指定各依赖版本号。

<dependencies>和<dependencyManagement>的区别

  • Artifacts specified in the  <dependencies>  section will ALWAYS be included as a dependency of the child module(s).
  • Artifacts specified in the  <dependencyManagement>  section, will only be included in the child module if they were also specified in the  <dependencies>  section of the child module itself.

也就是说<dependencyManagement>中的依赖有可能仅仅属于父模块,不被子模块继承。

关于版本表示

文档中提到,由于.yml/.properties文件也在使用${}占位符,所以pom.xml里面的版本控制可以改用@@的表达:

Since the application.properties and application.yml files accept Spring style placeholders (${…​}), the Maven filtering is changed to use @..@ placeholders. (You can override that by setting a Maven property called resource.delimiter.)

404 Not Found 错误排查

在HTTP码中,4开头的表示客户端错误,404表示客户端找不到服务端的接口。所以我们可以从接口———也就是后端的controller开始入手。

常规思路如下:

  • 用接口测试工具postman、apifox等等测试一下接口(但如果是需要鉴权才能看到的页面就有些麻烦,还要先获取token)。

如果接口测试正常,说明可能是前端配置写错了,检查一下api包下的配置和router配置;如果换了种客户端也不行,说明是后端的问题,检查一下后端的controller(Java)

本项目情况分析:

  • 但由于代码是由若依的代码生成器生成的,原则上代码内容应该不会有错误。所以有可能是代码包结构不匹配的问题。
  • 前面说到,在想生成二级项的时候接口是没问题的,而后来生成一级项的时候,我新建了个模块并且修改pom.xml,但其余后端代码就整个复制粘贴到新模块中了,这和我当时把controller单独放入admin中的做法不同。
  • 所以我尝试了一下把新功能的controller备份,再将它迁移到admin中的controller(注意,包结构要与admin中的一致,代码具体import的包也要重新修改名字)

再运行就成功了!

参考资料

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYrF3JEH' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片