- private static final long serialVersionUID=1L意思
是定义程序序列化ID。 序列化ID,相当于身份认证,主要用于程序的版本控制,保持不同版本的兼容性,在程序版本升级时避免程序报出版本不一致的错误。 - xml中书写模糊查询
<!-- ******************** 模糊查询的常用的3种方式:********************* -->
<select id="getUsersByFuzzyQuery" parameterType="User" resultType="User">
select <include refid="columns"/> from users
<where>
<!--
方法一: 直接使用 % 拼接字符串
注意:此处不能写成 "%#{name}%" ,#{name}就成了字符串的一部分,
会发生这样一个异常: The error occurred while setting parameters,
应该写成: "%"#{name}"%",即#{name}是一个整体,前后加上%
-->
<if test="name != null">
name like "%"#{name}"%"
</if>
<!--方法二: 使用concat(str1,str2)函数将两个参数连接 -->
<if test="phone != null">
and phone like concat(concat("%",#{phone}),"%")
</if>
<!--方法三: 使用 bind 标签,对字符串进行绑定,然后对绑定后的字符串使用 like 关键字进行模糊查询 -->
<if test="email != null">
<bind name="pattern" value="'%'+email+'%'"/>
and email like #{pattern}
</if>
</where>
</select>
- getById的作用
链接uniapp和手机调试
localhost端口找不到 报着样的错误:
request:fail abort statusCode:-1 Failed to connect to localhost/127.0.0.1:8080
这是因为手机上调试不是本机 肯定不会找到localhost端口 原来我还以为是因为我设置了redis缓存 找不到redist数据库的缘故。
解决办法:让手机和电脑链接同一个wifi 然后找到电脑的(win+r输入ipconfig)ipv4
把要访问的基准路径修改成此ip。
token是空的问题
[Vue warn]: Error in v-on handler (Promise/async): "TypeError: Cannot read property 'token' of null"
17:24:21.262 (found at pages/auth/login.vue:1)
17:24:21.293 TypeError: Cannot read property 'token' of null
这样的报错 很明显就是token的问题,结果我就在我配置的拦截器中用各种的方法添加token
config.header.token= vm.vuex_token;
if(config.url == '/admin/login') config.header.notoken = "xxxx";
折腾了好一会,瞄了眼后台原来是我的那个用户没有分配资源(那个是我很久以前创建的用户)
完全和token没有关系。
有时候报的错误很诡异 ,所以我们才要统一处理后台返回的一些错误。
get传参问题
这个报错很离谱,原来我把它定位成vuex存储编码问题,因为一开始我这参数传的是vuex中的变量,一眼看出拼接中含有乱码。
在我直接用存在全局变量vuex中的元素当作http请求的参数的时候出现这样的错误:
前台:
后台是这样子:
但是我用psstman测试就后端接口是没有问题的
查看请求payload才发现这里的中文还有部分符号都已经成为乱码了,我属实没看懂,乱码至少因该在sql中出错吧(顶多出不出来),为什么会这样,在控制台输出这个全局变量完全没问题,只可能因为请求中的编码问题吧。
然后我看到了
直接就可以转换成我们的源码,这因该就不是编码问题。
然后仔细看了一下返回的代码400:400(错误请求): 服务器不理解请求的语法
Required request body is missing 也就是说没有请求的参数 难道是get请求携带不来这样多的数据
get请求携带的数据量
感觉也没有超过啊
然后想到了是不是请求方式的问题,当我把这个方法修改为post请求的时候问题解决。
get请求会把你传过去的对象的属性一个个取出来问好拼接在url上,这样如果属性中又空值就麻烦了
这样就会导致拼接错误。
- get中传参如果要传递的是一个参数 如这样的接口
@RequestMapping(value = "/getResourceByRoleId", method = RequestMethod.GET)
@ResponseBody
public CommonResult<List<UserResource>> getResourceByRoleId(@RequestParam int roleId){
List<UserResource> resourcesList = resourceService.getResourceByRoleId(roleId);
return CommonResult.success(resourcesList);
}
在用uview封装的请求中 没有办法单独传递一个参数,或者直接在url上拼接,故可以定义一个这样的对象,里面包含这样的参数,注意属性名称要对应,其中属性数量中可以超过要传递的数量,但是其中的属性不能有空值,不然会报错。
public CommonResult updateIsOccupy(@PathVariable int id,@RequestParam(value="isOccupy") int isOccupy)
如果有@requestParam这样注解的参数,就只能写成get请求,应为这样的注解最终就是将这个注解中的key value键值对用?的方式拼接,然后访问,如果写成post请求,就不会url上拼接,最终导致访问不到请求错误,
vm.$u.api.updateIsOccupy = params => vm.$u.get('/seatInfo/updateIsOccupy/'+params.id,params);
改成get妥妥的。
而且这样的既有url地址参数,又有请求参数的请求方式可以向上面的方式一样进行拼接得到。
总结:get请求就是在地址栏上拼接的操作,任何的@RequestParam @PathVariable 像这样的注解不知道怎么自动拼接,手动也能搞定。而form和封装好的对象都是自动拼接,但是自动拼接要注意形式,对像的话可以多加属性,但是要注意多加的属性不能有空,名称要对的上。那种可以选择的表单模糊查询,我忘记它到地是怎样完成的了。有时间可以看看那种是自动拼接还是要判断来着。
post请求参数在地址栏中看不见的,可以把它当成是压缩打到了请求头中。
- uview中地址栏参数传递问题
连接超时报错
请求头是这样子的
在我从图书馆返回宿舍的时候又出现了这个错误,本来在图书馆已经解决上面的问题就是因为get请求方式的问题,这个报错猜想就是内网地址有问题。
果然查看宿舍的ip为
修改请求中的内网地址问题解决。
返回对象promise的分解
想要获取里面的数据 可写如下代码:
let lyric = getLyric(this.$store.state.songId);
let a = lyric.then((res)=>{
console.log(res.data)
});
也可以修改成为异步请求(async await),就变成这样:
路由跳转问题
click(item) {
//解决this问题
let that=this
// 允许从相机和相册扫码
if(item.title=='扫码选座'){
uni.scanCode({
success: function (res) {
//this.$u.api.orderSeat(res.result);
console.log(item.url);
//console.log(this);
that.$u.route({
url:item.url
})
console.log('条码类型:' + res.scanType);
console.log('条码内容:' + res.result);
},
fail:function (){
that.$refs.uToast.show({
title:"扫码失败 请重新扫码",
type:"error"
})
}
});
}
}
首先遇到的就是this问题 在函数success: function (res)的this就不是页面这个对象,而是代指的这个函数,而这个函数没有 $u这个象,无法使用其封装好的路由跳转工具,可以用一个变量传进来解决。之后就是 $refs这个有了,但是还是不能跳转到我想要的页面,在这里我耽搁了好长时间。最终无意间我有重新创建了我要跳转的页面,结果行了。
原来没有在page.js中声明我的这个页面。
别看这么简单每一次都是一个小错误,你解决了感觉就这 简单,但是在没有解决的时候是真难受,完全没有头绪。