spring异常+自定义以及使用

1、首先自定义异常

DataException:

package com.wbg.maven1128.exception;public class DataException extends Exception {public DataException(){}public DataException(String msg){super(msg);}
}

View Code

DbException:

package com.wbg.maven1128.exception;public class DbException extends Exception {public DbException(){}public DbException(String msg){super(msg);}
}

View Code

2、在dao层把异常抛了

 在服务层做好

不使用注解方法

在控制层使用

@Controller
@RequestMapping("/order")
public class OrdersController {@Autowiredprivate OrdersService ordersService;@PostMapping(produces = "application/json;charset=utf-8")@ResponseBodypublic String add(Orders orders ){System.out.println(orders);try {ordersService.insert(orders);}catch(DbException e){return e.getMessage();} catch (DataException e) {return e.getMessage();}return "成功";}@GetMappingpublic String index(){return "order_add";}

View Code

1、自定义AbstractHandlerExceptionResolver

  自定义就是当遇到AbstractHandlerExceptionResolver异常的时候直接进入自定义的异常,不再进入AbstractHandlerExceptionResolver

  第一步:创建一个类来进行继承AbstractHandlerExceptionResolver类

MyExceptionResolver :

package com.wbg.maven1128.exception;import org.springframework.beans.TypeMismatchException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyExceptionResolver extends AbstractHandlerExceptionResolver {@Overrideprotected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {if(ex instanceof DbException){return new ModelAndView("数据库错误");}else if(ex instanceof TypeMismatchException){return new ModelAndView("TypeMismatchException");}return null;}
}

View Code

  第二步:进行在xml注册

<bean class="com.wbg.maven1128.exception.MyExceptionResolver"/>

  

  最后直接在方法体上抛出异常即可throws Exception

2、使用ExceptionHandler注解方式

@Controller
@RequestMapping("/order")
public class OrdersController {@Autowiredprivate OrdersService ordersService;@PostMapping(produces = "application/json;charset=utf-8")@ResponseBodypublic String add(Orders orders ) throws Exception {ordersService.insert(orders);return "成功";}@GetMappingpublic String index(){return "order_add";}@ExceptionHandler(DbException.class)public String handlerDbException(Exception ex, Model model){model.addAttribute("err",ex.getMessage());return "err1";}@ExceptionHandler(DataException.class)public ModelAndView handlerDbException2(Exception ex, Model model){model.addAttribute("err",ex.getMessage());return new ModelAndView("err2");}

View Code

3、使用@ControllerAdvice注解(推荐)

1、首先创建一个类,在这个类上加注解

2、在该类中写方法,方法上使用@ExceptionHandler注解进行捕获异常

3、然后在Controller层直接抛出异常、会自动捕获

package com.wbg.maven1128.controller;import com.wbg.maven1128.exception.DbException;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;@Component
@ControllerAdvice
public class AllControllerAdvice {// 这个处理,对所有的 Controller 都会有效@ExceptionHandler(Exception.class)@ResponseStatus(value = HttpStatus.URI_TOO_LONG)@ResponseBodypublic String handlerDbException3 () {return "ksjfksd";}@ExceptionHandler(DbException.class)@ResponseStatus(value = HttpStatus.URI_TOO_LONG)@ResponseBodypublic String DbException3 () {return "ksjfksd";}@ExceptionHandler(RuntimeException.class)public String handlerDbException4 () {return "runtime";}
}

View Code

测试:

posted @ 2018-11-28 17:04 韦邦杠 阅读(...) 评论(...) 编辑 收藏

spring异常+自定义以及使用相关推荐

  1. 3.Spring Security 自定义用户认证

    Spring Security自定义用户认证 自定义认证过程 自定义认证的过程需要实现Spring Security提供的UserDetailService接口,该接口只有一个抽象方法loadUser ...

  2. spring AOP自定义注解方式实现日志管理

    转:spring AOP自定义注解方式实现日志管理 今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接 ...

  3. spring中自定义注解(annotation)与AOP中获取注解___使用aspectj的@Around注解实现用户操作和操作结果日志

    spring中自定义注解(annotation)与AOP中获取注解 一.自定义注解(annotation) 自定义注解的作用:在反射中获取注解,以取得注解修饰的类.方法或属性的相关解释. packag ...

  4. Spring Security自定义登录验证及登录返回结果

    Spring Security自定义登录验证及登录返回结果 一.功能描述 二.处理逻辑 简单流程 自定义UserDetails 自定义UserDetailsDAO 自定义UserDetailsServ ...

  5. spring security 自定义认证登录

    spring security 自定义认证登录 1.概要 1.1.简介 spring security是一种基于 Spring AOP 和 Servlet 过滤器的安全框架,以此来管理权限认证等. 1 ...

  6. spring security自定义指南

    序 本文主要研究一下几种自定义spring security的方式 主要方式 自定义UserDetailsService 自定义passwordEncoder 自定义filter 自定义Authent ...

  7. java 外部覆盖内部配置,Spring 与自定义注解、外部配置化的结合使用

    Spring 与自定义注解.外部配置化的结合使用 一.Java注解的简单介绍 注解,也叫Annotation.标注,是 Java 5 带来的新特性. 可使用范围 类.字段.方法.参数.构造函数.包等, ...

  8. Spring Security——自定义认证错误提示信息及自适应返回格式解决方案

    解决方案 package com.hailiu.web.handler;import com.hailiu.model.Log; import com.hailiu.web.bean.Response ...

  9. spring异常 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderServlet

    spring异常 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderServlet 情况1: ...

  10. spring使用自定义注解_用Spring组成自定义注释

    spring使用自定义注解 Java批注在2004年随Java 5一起引入,是一种将元数据添加到Java源代码中的方法. 如今,许多主要框架(如Spring或Hibernate)都严重依赖注释. 在本 ...

最新文章

  1. R语言dataframe分组数据汇总(aggregate and sum):类似于excel的sumif函数
  2. Linux学习笔记(三)|Vim编辑器
  3. 结合Selenium 和 Requests完成动态数据爬取
  4. Java中的Properties类详解Properties配置文件
  5. 警卫站岗(树上dp)
  6. Bootstrap 排版h1~h6标题
  7. android 极光推送1011,极光推送 · OpenKit使用手册 · 看云
  8. Android 分贝测试仪功能,挥泪整理面经
  9. 推荐13个高清优质无版权图库
  10. 【python】Python报错:RecursionError: maximum recursion depth exceeded in comparison
  11. php readystate,ajax+php打造进度条 readyState各状态
  12. IDEA 依赖自动导入,不用每次手动点击Load Maven Changes图标
  13. mysql error1205 博客_MySQL的ERROR 1205错误分析
  14. Android 仿微信红包动画 平移动画
  15. 共享充电宝投放餐饮行业收益如何?
  16. 【技术类】【ArcGIS对国产卫星的支持2:高分一号卫星】篇2、高分一号(GF-1)卫星影像数据介绍
  17. P7714「EZEC-10」排列排序 题解
  18. bash shell 命令
  19. 使用python提取所有word文件中的所有图片
  20. [搬运]一百三十四 - TikTok原评论区搬运(机翻)

热门文章

  1. SQLServer数据库中截取字符串的常用方法
  2. 2021-06-20----CSS三种选择器
  3. 24小时计时器设计logisim_c++日期、时间和计时器
  4. oracle数据库赋权_(转)Oracle数据库如何授权收费(Database Licensing)
  5. 解决excel导出大数字溢出或者被科学计数法格式化
  6. cat的用法matlab,MATLAB中“repmat”与“cat”函数的用法
  7. mysql的执行局计划
  8. html实现圆形计时器特效,js css3圆形的时分秒计时器动画特效
  9. java基础总结08-集合
  10. 使用Maven 插件构建docker 镜像和推送仓库