全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring Boot学习入门之统一异常处理详解

前言

关于之前的一篇所讲到的表单验证中提到,如果产生错误,可以得到错误的信息,但是返回值的问题却没有考虑。

其中所提到的Controller:

@RequestMapping(value = "/doRegister", method = RequestMethod.POST) 
public @ResponseBody User doRegister(@Valid User user, BindingResult result, Model model) { 
 if (result.hasErrors()) { 
 List<ObjectError> list = result.getAllErrors(); 
 for (ObjectError error : list) { 
  System.out.println(error.getDefaultMessage()); 
 } 
 return null; 
 } 
 System.out.println("注册.."); 
 return user; 
} 

如果验证不通过,我们不应该返回null的,这会对前端来说并不友好。

所以我们应该定义一个统一的返回格式:

public class ReturnType { 
 
 private int code; 
 private User data; 
 private String msg; 
 
 public ReturnType(int code, String msg, User data) { 
 this.code = code; 
 this.msg = msg; 
 this.data = data; 
 } 
 
 public int getCode() { 
 return code; 
 } 
 public void setCode(int code) { 
 this.code = code; 
 } 
 public User getData() { 
 return data; 
 } 
 public void setData(User data) { 
 this.data = data; 
 } 
 public String getMsg() { 
 return msg; 
 } 
 public void setMsg(String msg) { 
 this.msg = msg; 
 } 
 
} 

这样一来,返回的结果中的json的格式是固定的。

虽然我们的希望是好的,但是并不是总是可以这样的,因为不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。

如果存在下面这种情况:

@RequestMapping(value = "/doRegister", method = RequestMethod.POST) 
public @ResponseBody ReturnType doRegister(@Valid User user, BindingResult result, Model model) throws Exception { 
 throw new Exception("new Exception"); 
} 

这就好像在调用Service层代码的时候,执行方法的过程中遇到了一个异常,那么回得到什么样的结果呢?
无论如何,返回的肯定不是我们之前定义好的格式的返回值。

那我们应该怎么做呢?

这里就需要进行统一的异常处理了。

@ControllerAdvice 
public class ExceptionHandle { 
 
 /* 表明这个handler只处理什么类型的异常 
 * */ 
 @ExceptionHandler(value = Exception.class) 
 // 返回值为json或者其他对象 
 @ResponseBody 
 public ReturnType handle(Exception e) { 
 return new ReturnType(-1, e.getMessage(), null); 
 } 
} 

创建这么一个handler类,当Controller抛出异常的时候,就会委托给这个类其中的方法进行执行。

这样一来,就不会出现即使抛出异常,也不会得到不是我们期望的返回值的结果了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# spring  # boot  # 异常处理  # 统一异常  # 统一异常处理  # Spring Boot统一异常处理详解  # spring boot请求异常处理并返回对应的html页面  # SpringBoot初始教程之统一异常处理详解  # 详解Springboot自定义异常处理  # Spring Boot全局异常处理解析  # springboot全局异常处理详解  # SpringBoot学习之全局异常处理设置(返回JSON)  # Spring Boot中使用AOP统一处理web层异常的方法  # 浅谈Spring Boot 异常处理篇  # 如何优雅的处理Spring Boot异常信息详解  # 返回值  # 我们应该  # 抛出  # 就会  # 这就  # 却没有  # 这种情况  # 怎么做  # 不可避免  # 这篇文章  # 谢谢大家  # 可以得到  # 表单  # 或者其他  # 这会  # 讲到  # 值为  # 过程中  # 操作过程  # 无论如何 


相关文章: 专业网站建设制作报价,网页设计制作要考什么证?  建站VPS选购需注意哪些关键参数?  建站之星后台密码遗忘?如何快速找回?  建站主机如何选?性能与价格怎样平衡?  制作公司内部网站有哪些,内网如何建网站?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  php json中文编码为null的解决办法  Python路径拼接规范_跨平台处理说明【指导】  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何通过服务器快速搭建网站?完整步骤解析  ,有什么在线背英语单词效率比较高的网站?  建站之星3.0如何解决常见操作问题?  定制建站流程步骤详解:一站式方案设计与开发指南  建站之星官网登录失败?如何快速解决?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  孙琪峥织梦建站教程如何优化数据库安全?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何在宝塔面板中创建新站点?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  微信小程序 五星评分(包括半颗星评分)实例代码  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  移民网站制作流程,怎么看加拿大移民官网?  如何在阿里云完成域名注册与建站?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  建站之星后台管理系统如何操作?  建站主机如何选?高性价比方案全解析  如何快速选择适合个人网站的云服务器配置?  广州商城建站系统开发成本与周期如何控制?  山东网站制作公司有哪些,山东大源集团官网?  如何在阿里云服务器自主搭建网站?  盘锦网站制作公司,盘锦大洼有多少5G网站?  建站之星如何保障用户数据免受黑客入侵?  黑客如何通过漏洞一步步攻陷网站服务器?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  怀化网站制作公司,怀化新生儿上户网上办理流程?  建站主机与服务器功能差异如何区分?  linux top下的 minerd 木马清除方法  建站之星如何实现PC+手机+微信网站五合一建站?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  黑客入侵网站服务器的常见手法有哪些?  建站之星如何配置系统实现高效建站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  宝塔建站助手安装配置与建站模板使用全流程解析  如何高效配置IIS服务器搭建网站?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  音响网站制作视频教程,隆霸音响官方网站?  重庆市网站制作公司,重庆招聘网站哪个好?  如何在宝塔面板中修改默认建站目录?  常州自助建站费用包含哪些项目?  ,石家庄四十八中学官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。