正常情况下,在数据请求时,我们希望登陆过期等判断逻辑在拦截器就处理掉
所以就会在preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
中去做token查询等验证之类的事情
但是处理时发现一个问题:

POST http://localhost:2222/user/getUserInfo 500
No 'Access-Control-Allow-Origin' header is present on the requested resource.
前端返回了500错误,并弹出一个跨域请求的error,两个问题,一个个解决
500错误(dao层空指针)
返回服务器后台打印,看到

为了寻找到哪个指针为空,我加了空指针断点. IDEA有一个强大的断点类型:异常断点. 在程序出现指定的异常时,自动断点,无论在哪里,这个时候debug可以看清所有的情况,按图设置:



添加完成后重新运行项目进行请求,就会发现:

问题
造成dao注解对象null的原因是因为拦截器加载是在springcontext创建之前完成的,所以在拦截器中注入实体自然就为null。
解决
解决方法就是让bean提前加载,让拦截器后于springcontext加载,将配置信息修改为如下:

添加后 返现mapper不会空 但是出现第二个问题:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
跨域问题
这问题也挺简单的
一种方式,两种写法
方法一:

方法二:

最后还有一个我自己的笨蛋点:
对于mysql的语句,如果你select了一个model,然后修改某个值,然后想update这个model,
这时候你必须将你的update_time置空,否则他只会更新你传进去的值.
(如果你的update_time是设置成
update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
)
最后吐槽一点:解决问题后,为了写一篇blog,然后一点点回退,把代码还原成之前错误的时候去截图真的好麻烦啊o(╯□╰)o
网友评论