目的:将校验失败的错误信息在客户端显示出来。
实现:新建一个全局异常拦截器,拦截绑定异常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层就抛了。

  1. 创建一个异常对象
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;}
}
  1. 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);//能来到这说明校验通过,返回成功。}
}

秒杀项目学习笔记-异常处理相关推荐

  1. 秒杀项目学习笔记-JMeter压测

    QPS 衡量吞吐能力,是最重要的观察指标. Redis压力测试命令(Linux) springboot打war包 安装Linux版JDK java -jar 首先执行jar里面的main函数. 在安装 ...

  2. spring boot 前后端分离项目(商城项目)学习笔记

    spring boot 前后端分离项目(商城项目)学习笔记 目录 spring boot 前后端分离项目(商城项目)学习笔记 后端配置 springboot项目 pom.xml文件 maven 配置文 ...

  3. TheBeerHouse 网站项目学习笔记(5)---架构设计

    前述讨论:    TheBeerHouse 网站项目学习笔记(1)----换肤技术                     TheBeerHouse 网站项目学习笔记(2)----个性化管理      ...

  4. 云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin

    云计算学习笔记---异常处理---hadoop问题处理ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.lang.NullPoin ...

  5. 尚医通项目学习笔记Part1

    尚医通项目学习笔记 前言 一.目前学习进度 二.学习记录 1.项目简介 1.1 项目所会用到的技术栈 1.2 业务流程 2.项目学习笔记 2.1MyBatis-Plus相关 2.2搭建项目框架 2.3 ...

  6. USB摄像头视频监控项目学习笔记

    一个摄像头监控应用程序的系统调用如下所示: /* open  * VIDIOC_QUERYCAP 确定它是否视频捕捉设备,支持哪种接口(streaming/read,write)  * VIDIOC_ ...

  7. vue3小兔鲜商城项目学习笔记+资料分享01

    最近正在学习vue3小兔鲜,需要相关学习资料的可以点链接 https://docs.qq.com/doc/DUmhUVERtUHpLaG1a 下面试学习笔记 项目起步 项目预览地址 小兔鲜儿商城:ht ...

  8. vue3小兔鲜商城项目学习笔记+资料分享06

    建议大家先去看我第一篇小兔鲜的文章,强烈建议,非常建议,十分建议,从头开始看更完整. 最近正在学习vue3小兔鲜 下面是学习笔记 购物车模块 购物车功能分析 [外链图片转存失败,源站可能有防盗链机制, ...

  9. vue3小兔鲜商城项目学习笔记+资料分享08

    建议大家先去看我第一篇小兔鲜的文章,强烈建议,非常建议,十分建议,从头开始看更完整. 最近正在学习vue3小兔鲜 下面是学习笔记 支付模块 路由和组件 任务目标: 完成支付页路由和组件 [外链图片转存 ...

最新文章

  1. Microsoft Dynamics CRM 2015 数据管理 之 如何批量导入数据到 正式区(二)系统自带示例数据 安装及教学...
  2. 计算机软件uml,计算机软件——UML旅游管理系统.pdf
  3. oracle+nvlif函数,Oracle中的NVL()、NVL2()、NULLIF()、Coalesce()函数
  4. 【Asp.Net】:如何处理大量页面的身份验证跳转
  5. javaweb学习总结(三十六)——使用JDBC进行批处理
  6. django 转发_教你搭建Django环境,就是这么简单
  7. phpword 模板 多页_高中数学:各题型答题模板,吃透,灵活运用数学公式,解题更快!...
  8. js 自己试验 创建对象例子
  9. 13_python基础—函数进阶(参数、返回值、递归)
  10. 触发器_触发器第三弹
  11. 2015年 StoiGdoi 反思总结与未来计划
  12. opera mini 7.5安卓改服版
  13. ofo显示服务器故障,ofo服务器超时
  14. 遗传算法的应用之函数优化和组合优化
  15. 利用Retrofit, RxJava获取网络内容
  16. 用I2C级联扩展器做一个时钟盒子
  17. BUPT-CSAPP 2019 Fall 3.58 3.60 3.63
  18. jquery去除字符串空格
  19. 简化ETL工作,编写一个Canal胶水层
  20. 在中山大学会出现的电脑问题解决方案

热门文章

  1. 深入了解W3C标准及规范
  2. 旁流综合水处理器的安装与连接技巧
  3. layout_gravity 和 gravity以及对应值的详解
  4. 苹果cms安装PHP,苹果cms图文安装教程和苹果cms模板安装教程详解
  5. 利用计算机专业优势 帮助大家,计算机专业优势学校
  6. 广和通5G模组成功联调基于高通IPQ系列+骁龙X62的5G CPE方案,已实现大规模量产
  7. kubectl k8s 复制文件从宿主机到pod内或从pod到宿主机内
  8. SSH 详解(实践及应用)
  9. 苹果发布全新旗舰,对国内手机市场将造成什么影响?
  10. Dynamic Memory Based Attention Network for Sequential Recommendation【论文解读】