RuoYi框架使用爬坑日记

网友投稿 1604 2022-05-30

1.简介

RuoYi框架是基于SpringBoot、Shiro、Mybatis的权限的后台管理系统,本例中使用的爬坑日记是基于RuoYi-Vue(SpringBoot+Vue)+MybatisPlus进行部署的前后端分离项目,首先先来波官网传送门http://ruoyi.vip/

因为需要快速搭建项目,所以找到若依这个比较完善的框架进行开发,若依框架中基本继承了目前能想到的大多数功能,开发快捷、方便,很多都配置好了直接进行调用就可以了。

开发过程中的常见的一些问题,文档上大多数都有解决办法,常见问题的解答。

2.爬坑日记

2.1 外部接口无法访问

2.1.1 问题描述

由于要使用外部接口,需要跳出本来的鉴权一系列操作,比如:外部对接接口、下载等。

{"msg":"请求访问:/XXX/test,认证失败,无法访问系统资源","code":401}

2.1.2 解决

2.1.2.1 方法一:可以惨遭若依自带的upload方法,将src/main/java/....../framework/config/SecurityConfig.java中的添加匿名可访问的权限,再在请求头中相应的地址常量,如下可进行页面下载请求,其中注意antMatchers中"test/**"和"/test**"的区别,"test/**"表示test/abc***之类的url,而"/test**"表示/testabc这样的url请求。

protected void configure(HttpSecurity httpSecurity) throws Exception

.antMatchers("/test/test/**").anonymous()

window.location.href = process.env.VUE_APP_BASE_API + '/test/id=' + id

2.1.2.2 方法二:

开始就处理请求头,给没有通过过滤的url手动设置个请求头的token和请求地址的常量

2.1.2.3 方法三:

还有在请求头部这样拼接token的(未尝试)

Vue.http.headers.common['Authorization'] = 'Bearer '+getToken();参考

2.1.2.4 方法四:

还有在请求头部这样拼接token的(未尝试)

axios.defaults.headers.common["token"] = localStorage.getItem("token");参考

2.2 请求参数问题

2.2.1 get请求

axios({

url: '/test/test',

RuoYi框架使用爬坑日记

method: 'get',

params: queryParams

}).then(response => {

相关业务代码。。。

})

2.2.2 post请求,使用若依自带分页方法

2.2.2.1 首先在自定义的controller中继承extends BaseController ,再在方法的返回类型设置TableDataInfo类(封装好的分页处理类),第一行进行分页类型的初始化startPage()方法,获取请求中的分页信息等操作,接着就可以写相关业务代码,查询出一个集合list,最后返回封装好的getDataTable(list)方法,在前端

@PostMapping("/list") public TableDataInfo list(@RequestBody 实体类 en){ startPage(); List<实体类> list = xxxService.getList(en); return getDataTable(list); }

前端分页组件

v-show="total>0"

:total="total"

:page.sync="queryParams.pageNum"

:limit.sync="queryParams.pageSize"

@pagination="getDataList"

/>

初始化的参数

queryParams: {

pageNum: 1,

pageSize: 10,

},

total: 0,

dataList: [],

前端请求方法

axios({ url: '/test/test', method: 'post', data: JSON.stringify(this.dataForm) }).then((data) => { if (data && data.code == 200) { this.dataList = data.rows; this.total = data.total; } else { this.dataList = [] this.total = 0 }

或者这样传个别属性

axios({ url: `/test/test`, method: 'post', data: { 'id': this.dataForm.id || undefined, 'a': this.dataForm.a, 'b': this.dataForm.b, 'test':this.test } }).then((data) => { if (data && data.code === 200) {......

3.总结一些MybatisPlus中条件写法

eq 就是 EQUAL等于

ne就是 NOT EQUAL不等于

gt 就是 GREATER THAN大于

lt 就是 LESS THAN小于

ge 就是 GREATER THAN OR EQUAL 大于等于

le就是 LESS THAN OR EQUAL 小于等于

queryWrapper.select("name", "age")设置查询指定字段name和age

queryWrapper.select(Test.class,test -> !test.getColumn().equals("name") && !test.getColumn().equals("id"));查询排除name和id外的所有字段参考

路漫漫其修远兮,在使用若依框架快速开发的过程中,虽然里面很多封装好的方法使用起来很遍历,开发文档也解决了大多数问题,但是毕竟大多数都是个性化开发,里面或多或少会出现一卡卡一天,一个bug改一天的情况,再次总结部分开发过程中的爬坑问题和解决方法。。。加油~

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:HTML5中video标签与canvas绘图的使用
下一篇:【Flutter】Image 组件 ( cached_network_image 网络图片缓存插件 )
相关文章