如果没有写这个,浏览器会收到500状态码,但是服务器是响应了你的请求的,只不过没有找到对应的用户,也就是业务逻辑出了问题,但是,服务器是正确的响应了你的发的请求,不应该是500错误
RESTful风格的方法会返回json字符串,
Map<String, Object> responseData = new HashMap<>();
return CommonResultType.create(responseData, "fail");
你把map赋值存入后,它里面自动帮你把map序列化成json字符串,map是键值对,所以你看到打印出来的是一对一对的
data
errCode10002
errMsg未知错误
如果你直接返回
EmBusinessError.UNKNOWN_ERROR
那么就是打印的就是(1002,"未知错误")这样的json串,所以这也就是为什么不直接返回的原因,而要map里面过一遍的原因
这部分不需要很强的基础,但建议了解Java语法基础、数据库基本操作、SpringBoot框架概念后,准备做项目时再学习
断点查看到 都没有走到 if 判断userModel 为空的之后的逻辑,直接查询时就报空指针了
加1,我也是运行到这里就出现error了,返回500状态码
判空一下
UserModel (Integer id) { UserDO userDO = .selectByPrimaryKey(id)(userDO==){ } UserpasswordDO userpasswordDO = .selectByUserId(userDO.getId())convertFromDataObject(userDOuserpasswordDO)}
不然捕获的异常是空指针异常不是自定义异常,所以报的还是500
重新依赖jdk试一下
@RequestBody是获取请求体的数据,@ResponseBody才是把对象转换为json格式数据的注解
啊 我找到问题了.....果然有个地方写错了 出现了递归
1、可以把00001换成10001这种是不以0开头的数字
2、可是把00001从Integer换成String格式
我自己弄懂了,是因为我代码写错了
if (ex instanceof BusinessException)
我错误的写成了
if (ex instanceof Exception)
老师代码没问题,就是让UserModel==null,就是让它抛出java.lang.NullPointException,然后通过SpringBoot的注解
@ExceptionHandler(Exception.class)
进行拦截,然后自定义处理。
总结:
1、代码一定要跟着敲一遍甚至两遍三遍(我是跟着敲的第二遍,第一遍用了86h,惨不忍睹啊w(゚Д゚)w,这一遍感觉比上一遍顺利一些)
2、敲错不要怕,处理好一个Bug会理解的更加深刻
3、大家加油!
也可以使用ControolerAdvice
UserServiceImpl.java的改成這樣就行了
UserDo userDo = userDoMapper.selectByPrimaryKey(id); if(userDo==null){ return null; } UserPasswordDo userPasswordDo = userPasswordDoMapper.selectByUserId(userDo.getId()); if (userPasswordDo==null){ return null; } return convertFromDataobject(userDo,userPasswordDo);}
你在BaseController里面捕获到未知异常用打印出日志不就行了
向上转型,这样的好处就是,你还可以新建一个EmRuntimeError实现CommonError,这样直接传参就好了,方法都不用改的。这样就是把具体实现解耦出来。
当然可以
你可以打印日志,这样做只是为了前端显示的时候更加优雅。内部什么错误,还是会报出来的
没看完视频就提问了 尴尬
这样写结构比较清晰,这对于后期的维护是很方便的
是的,你不重写就是用父类的方法实现,如果你重写了就会用子类自己方法。
在BusinessException类中,你需要对getErrCode与getErrMsg方法进行定义
在bean上,已经做好处理。,只有在bean上加上注解的异常错误才会被这种类似过滤器的类拦截,并且返回前台,开发对应用户,不能把错误留给用户,体验极差,所以这样做是有好处的,如果你想在控制台上打印错误信息也可以 的
况且已经有错误信息的提示了
2019-01-14 10:08:02.297 WARN 6244 --- [nio-8090-exec-5] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [com.maioshaproject.error.BusinessException]