老笔宅开发报错记录

  • 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的分解

这样的输入

在这里插入图片描述
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中声明我的这个页面。
别看这么简单每一次都是一个小错误,你解决了感觉就这 简单,但是在没有解决的时候是真难受,完全没有头绪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值