在项目中需要设计统一的错误消息,通常使用枚举类定义“错误码”与“错误消息”;

并且也可以做错误消息自定义。

定义通过错误接口类:CommonError

  1. public interface CommonError {
  2. // 获取错误码
  3. int getErrorCode();
  4. // 获取错误消息
  5. String getErrorMsg();
  6. // 设置错误消息,用于覆盖Enumeration中设置的默认错误消息
  7. CommonError setErrorMsg(String errorMsg);
  8. }

定义错误枚举类:EnumError

  1. /**
  2. * 继承至CommonError
  3. */
  4. public enum EnumError implements CommonError {
  5. // 10000开头为通用错误类型
  6. UNKNOWN_ERROR(10001, "未知错误"),
  7. PARAMETER_VALIDATION_ERROR(10002, "参数不合法"),
  8. // 20000开头为用户信息相关错误码定义
  9. USER_NOT_EXIST(20001, "用户不存在"),
  10. USER_LOGIN_FAIL(20002, "用户名或密码错误"),
  11. USER_NOT_LOGIN(20003, "用户未登录"),
  12. // 定义错误码和错误消息字段
  13. private int errorCode;
  14. private String errorMsg;
  15. EnumError(int errorCode, String errorMsg) {
  16. this.errorCode = errorCode;
  17. this.errorMsg = errorMsg;
  18. }
  19. @Override
  20. public int getErrorCode() {
  21. return errorCode;
  22. }
  23. @Override
  24. public String getErrorMsg() {
  25. return errorMsg;
  26. }
  27. // 主要的作用:可以修改错误码对应的errorMessage
  28. @Override
  29. public CommonError setErrorMsg(String errorMsg) {
  30. this.errorMsg = errorMsg;
  31. return this;
  32. }
  33. }

定义业务异常类:BusinessException

  1. /**
  2. * 包装器业务异常类实现模式
  3. */
  4. public class BusinessException extends Exception implements CommonError {
  5. private CommonError commonError;
  6. // 通用构造器
  7. public BusinessException(CommonError commonError){
  8. super();
  9. this.commonError = commonError;
  10. }
  11. // 覆盖ErrorMessage的构造器
  12. public BusinessException(CommonError commonError, String errorMsg){
  13. super();
  14. this.commonError = commonError;
  15. this.commonError.setErrorMsg(errorMsg);
  16. }
  17. @Override
  18. public int getErrorCode() {
  19. return this.commonError.getErrorCode();
  20. }
  21. @Override
  22. public String getErrorMsg() {
  23. return this.commonError.getErrorMsg();
  24. }
  25. // 覆盖默认的errorMessage
  26. @Override
  27. public CommonError setErrorMsg(String errorMsg) {
  28. this.commonError.setErrorMsg(errorMsg);
  29. return this;
  30. }
  31. }

在Controller中使用BusinessException:定义BaseController类

  1. public class BaseController {
  2. // 定义ExceptionHandler解决未被Controller层吸收的exception
  3. @ExceptionHandler(value = Exception.class)
  4. @ResponseBody
  5. public CommonReturnType exceptionHandler(Exception ex){
  6. Map<String, Object> responseData = new HashMap<>();
  7. if(ex instanceof BusinessException){
  8. BusinessException businessException = (BusinessException)ex;
  9. responseData.put("errorCode", businessException.getErrorCode());
  10. responseData.put("errorMsg", businessException.getErrorMsg());
  11. } else {
  12. responseData.put("errorCode", EnumBusinessError.UNKNOWN_ERROR.getErrorCode());
  13. responseData.put("errorMsg", EnumBusinessError.UNKNOWN_ERROR.getErrorMsg());
  14. }
  15. return CommonReturnType.create(responseData, "failed");
  16. }
  17. }

在UserController中实现业务逻辑

  1. // 用户登录接口
  2. @RequestMapping(value = "/login", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded")
  3. @ResponseBody
  4. public CommonReturnType login(@RequestParam(name = "username") String username,
  5. @RequestParam(name = "password") String password) throws BusinessException {
  6. // 第一步,入参校验
  7. if(StringUtils.isEmpty(username) || StringUtils.isEmpty(username)){
  8. throw new BusinessException(EnumBusinessError.PARAMETER_VALIDATION_ERROR, "用户名和密码不能为空");
  9. }
  10. // 第二步,校验用户登录是否合法
  11. UserModel userModel = userService.validateLogin(username, PasswordEncrypt.encodeByMd5(password));
  12. // 第三步,加入到用户登录后的Session中
  13. this.httpServletRequest.getSession().setAttribute("IS_LOGIN", true);
  14. this.httpServletRequest.getSession().setAttribute("LOGIN_USER", userModel);
  15. return CommonReturnType.create(null);
  16. }

SpringBoot 通用Error设计的更多相关文章

  1. Cocos Creator 通用框架设计 —— 资源管理优化

    接着<Cocos Creator 通用框架设计 -- 资源管理>聊聊资源管理框架后续的一些优化: 通过论坛和github的issue,收到了很多优化或bug的反馈,基本上抽空全部处理了,大 ...

  2. 多租户通用权限设计(基于casbin)

    多租户通用权限设计(基于 casbin) 所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个bool判断. 权限几乎是每个系统必不可少的功能, 和具体业务结合之后, 在系统中 ...

  3. Android通用框架设计与完整电商APP开发系列文章

    作者|傅猿猿 责编|Javen205 有福利 有福利 有福利 鸣谢 感谢@傅猿猿 邀请写此系列文章 Android通用框架设计与完整电商APP开发 课程介绍 [导学视频] [课程详细介绍] 以下是部分 ...

  4. SpringBoot 通用返回类设计

    在项目中通常需要为前端设计通过的返回类,返回的格式为: { "status": "success", "data": {...} } 定义通 ...

  5. Cocos Creator 通用框架设计 —— 网络

    在Creator中发起一个http请求是比较简单的,但很多游戏希望能够和服务器之间保持长连接,以便服务端能够主动向客户端推送消息,而非总是由客户端发起请求,对于实时性要求较高的游戏更是如此.这里我们会 ...

  6. Springboot项目架构设计

    导航 前言 流水线 架构的艺术 项目架构 理解阿里应用分层架构 superblog项目架构 结语 参考 本节是<Spring Boot 实战纪实>的第7篇,感谢您的阅读,预计阅读时长3mi ...

  7. ASP.NET Aries 3.0发布(附带通用API设计及基本教程介绍)

    主要更新: 1:升级处理机制(js请求由同步变更为异步) 2:优化前端JS:包括API和配置方式. 3:增加InputDialog功能. 4:增远远程验证功能. 5:优化权限安全机制. 6:增加一次请 ...

  8. 通用Adapter设计,SparseArray+泛型+回调的使用

    看到题目,我相信聪明的各位已经有一定想法了. 一个Adapter,最简单的优化就是使用泛型,他可以省去非常多的代码,不过在此之上,我们还可以继续优化,优化他的好基友是:ViewHolder. 在过去, ...

  9. SpringBoot Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.

    使用SpringBoot写HelloWorld,当配置好启动类后,再创建新的controller或其它类,启动项目后访问对应的映射名,页面显示: Whitelabel Error Page This ...

随机推荐

  1. 转载:ResNeXt算法详解

    原文连接:http://blog.csdn.net/u014380165/article/details/71667916, 大神"AI之路”有很多经典的总结,推荐前往..   论文:Agg ...

  2. Mysql数据库存储是乱码问题(或者在查询时无法加载数据)

    在连接数据库时添加一行代码即可解决:?useUnicode=true&characterEncoding=utf8 截图如下:

  3. Tomcat unable to start within 45 seconds.

    解决的方法当然是设定这个时间,让其大于45秒,修改在当前项目所在的workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xm ...

  4. MVC结构简介

    本文编译自J2EE的相关文档.MVC(Model-View-Controller)应用程序结构被用来分析分布式应用程序的特征.这种抽象结构能有助于将应用程序分割成若干逻辑部件,使程序设计变得更加容易. ...

  5. ddos cc攻击简单介绍(转)

    何为syn flood攻击: SYN Flood是一种广为人知的DoS(拒绝服务攻击)是DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻 ...

  6. 170306、wamp中的Apache开启gzip压缩提高网站的响应速度

    一个网站的响应速度决定该网站的人气和质量,所以wamp配置的服务器也需要支持giz压缩来提高网站的响应速度,如何开启wamp的gzip压缩呢,经过在网站查找资料结合自己服务器中的配置,现在将这个方法分 ...

  7. Pycharm如何取消自动换行

    1.只对当前文件有效的操作是: 菜单栏->View -> Active Editor -> Use Soft Wraps (不选中) 2.要是想对所有文件都起到效果,就要在setti ...

  8. css中的clear:both,display:flex;

    介绍两者一起讨论的原因: 在明天就国庆的日子里陪着程序员的只有代码,啤酒,还有音乐,然后就是灯光下默默陪伴自己的影子.好了,不矫情了. -------------------------------- ...

  9. Apache配置HTTPS的过程小记

    一.HTTPS的summery,综述,它的基本原理,扫肓. http://www.codeceo.com/article/https-knowledge.html 读过后,就明白https怎么加密的, ...

  10. 转!!ftp学习

    转自:http://blog.csdn.net/wave_1102/article/details/50651433 FTP (File Transfer Protocol) 可说是最古老的协议之一了 ...