秒杀项目学习笔记-异常处理
目的:将校验失败的错误信息在客户端显示出来。
实现:新建一个全局异常拦截器,拦截绑定异常BindException,输出错误信息,并且优化返回信息的过程。
GlobleExceptionHandler 类
@ControllerAdvice
@ResponseBody
public class GlobleExceptionHandler {@ExceptionHandler(value=Exception.class)public Result<String> exceptionHandler(HttpServletRequest request,Exception e){if(e instanceof GlobalException){GlobalException ex = (GlobalException)e;return Result.error(ex.getCodeMsg());} else if(e instanceof BindException){BindException ex = (BindException)e;List<ObjectError> errors = ex.getAllErrors();ObjectError error = errors.get(0);String msg = error.getDefaultMessage();return Result.error(CodeMsg.BIND_ERROR.fillArgs(msg));}else{return Result.error(CodeMsg.SERVER_ERROR);}}
}
至此可以让客户端显示校验错误信息提示了。
正常项目处理异常都是抛异常,不是service层返回一个故障信息的对象,controller层再把信息返回给客户端。有异常直接在service层就抛了。
- 创建一个异常对象
public class GlobalException extends RuntimeException{private static final long serialVersionUID = 1L;private CodeMsg codeMsg;public GlobalException(CodeMsg codeMsg){//构造方法super(codeMsg.toString());this.codeMsg = codeMsg;}public CodeMsg getCodeMsg() {return codeMsg;}
}
- service层抛异常,而不是返回一个故障信息对象CodeMsg
@Service
public class MiaoshaUserService {@AutowiredMiaoshaUserDao miaoshaUserDao;public MiaoshaUser getByid(long id){return miaoshaUserDao.getById(id);}public CodeMsg login(LoginEntity loginEntity){if(loginEntity==null){throw new GlobalException(CodeMsg.SERVER_ERROR);}String mobile = loginEntity.getMobile();String formPass = loginEntity.getPassword();MiaoshaUser user = getByid(Long.parseLong(mobile));if(user==null){throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);}String dbPass =user.getPassword();String saltDB = user.getSalt();String calcPass = MD5Util.formToDb(formPass,saltDB);if(!calcPass.equals(dbPass)){throw new GlobalException( CodeMsg.PASSWORD_ERROR);}return CodeMsg.SUCCESS;}
}
controller层的代码极大简化,不需要写代码返回错误信息了
@Controller
@RequestMapping("login")
public class LoginController {private static Logger log= LoggerFactory.getLogger(LoginController.class);@AutowiredMiaoshaUserService miaoshaUserService;@RequestMapping("/to_login")public String tologin(){return "login";}@ResponseBody@RequestMapping("/do_login")public Result<Boolean> dologin(@Valid LoginEntity loginEntity){log.info(loginEntity.toString());miaoshaUserService.login(loginEntity);//校验失败,会自动抛异常return Result.success(true);//能来到这说明校验通过,返回成功。}
}
秒杀项目学习笔记-异常处理相关推荐
- 秒杀项目学习笔记-JMeter压测
QPS 衡量吞吐能力,是最重要的观察指标. Redis压力测试命令(Linux) springboot打war包 安装Linux版JDK java -jar 首先执行jar里面的main函数. 在安装 ...
- spring boot 前后端分离项目(商城项目)学习笔记
spring boot 前后端分离项目(商城项目)学习笔记 目录 spring boot 前后端分离项目(商城项目)学习笔记 后端配置 springboot项目 pom.xml文件 maven 配置文 ...
- TheBeerHouse 网站项目学习笔记(5)---架构设计
前述讨论: TheBeerHouse 网站项目学习笔记(1)----换肤技术 TheBeerHouse 网站项目学习笔记(2)----个性化管理 ...
- 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin
云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin ...
- 尚医通项目学习笔记Part1
尚医通项目学习笔记 前言 一.目前学习进度 二.学习记录 1.项目简介 1.1 项目所会用到的技术栈 1.2 业务流程 2.项目学习笔记 2.1MyBatis-Plus相关 2.2搭建项目框架 2.3 ...
- USB摄像头视频监控项目学习笔记
一个摄像头监控应用程序的系统调用如下所示: /* open * VIDIOC_QUERYCAP 确定它是否视频捕捉设备,支持哪种接口(streaming/read,write) * VIDIOC_ ...
- vue3小兔鲜商城项目学习笔记+资料分享01
最近正在学习vue3小兔鲜,需要相关学习资料的可以点链接 https://docs.qq.com/doc/DUmhUVERtUHpLaG1a 下面试学习笔记 项目起步 项目预览地址 小兔鲜儿商城:ht ...
- vue3小兔鲜商城项目学习笔记+资料分享06
建议大家先去看我第一篇小兔鲜的文章,强烈建议,非常建议,十分建议,从头开始看更完整. 最近正在学习vue3小兔鲜 下面是学习笔记 购物车模块 购物车功能分析 [外链图片转存失败,源站可能有防盗链机制, ...
- vue3小兔鲜商城项目学习笔记+资料分享08
建议大家先去看我第一篇小兔鲜的文章,强烈建议,非常建议,十分建议,从头开始看更完整. 最近正在学习vue3小兔鲜 下面是学习笔记 支付模块 路由和组件 任务目标: 完成支付页路由和组件 [外链图片转存 ...
最新文章
- Microsoft Dynamics CRM 2015 数据管理 之 如何批量导入数据到 正式区(二)系统自带示例数据 安装及教学...
- 计算机软件uml,计算机软件——UML旅游管理系统.pdf
- oracle+nvlif函数,Oracle中的NVL()、NVL2()、NULLIF()、Coalesce()函数
- 【Asp.Net】:如何处理大量页面的身份验证跳转
- javaweb学习总结(三十六)——使用JDBC进行批处理
- django 转发_教你搭建Django环境,就是这么简单
- phpword 模板 多页_高中数学:各题型答题模板,吃透,灵活运用数学公式,解题更快!...
- js 自己试验 创建对象例子
- 13_python基础—函数进阶(参数、返回值、递归)
- 触发器_触发器第三弹
- 2015年 StoiGdoi 反思总结与未来计划
- opera mini 7.5安卓改服版
- ofo显示服务器故障,ofo服务器超时
- 遗传算法的应用之函数优化和组合优化
- 利用Retrofit, RxJava获取网络内容
- 用I2C级联扩展器做一个时钟盒子
- BUPT-CSAPP 2019 Fall 3.58 3.60 3.63
- jquery去除字符串空格
- 简化ETL工作,编写一个Canal胶水层
- 在中山大学会出现的电脑问题解决方案
热门文章
- 深入了解W3C标准及规范
- 旁流综合水处理器的安装与连接技巧
- layout_gravity 和 gravity以及对应值的详解
- 苹果cms安装PHP,苹果cms图文安装教程和苹果cms模板安装教程详解
- 利用计算机专业优势 帮助大家,计算机专业优势学校
- 广和通5G模组成功联调基于高通IPQ系列+骁龙X62的5G CPE方案,已实现大规模量产
- kubectl k8s 复制文件从宿主机到pod内或从pod到宿主机内
- SSH 详解(实践及应用)
- 苹果发布全新旗舰,对国内手机市场将造成什么影响?
- Dynamic Memory Based Attention Network for Sequential Recommendation【论文解读】