spring异常+自定义以及使用
1、首先自定义异常

DataException:
package com.wbg.maven1128.exception;
public class DataException extends Exception {
public DataException(){
}
public DataException(String msg){
super(msg);
}
}
DbException:
package com.wbg.maven1128.exception;
public class DbException extends Exception {
public DbException(){
}
public DbException(String msg){
super(msg);
}
}
2、在dao层把异常抛了

在服务层做好

不使用注解方法
在控制层使用
@Controller
@RequestMapping("/order")
public class OrdersController { @Autowired
private OrdersService ordersService; @PostMapping(produces = "application/json;charset=utf-8")
@ResponseBody
public 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 "成功";
}
@GetMapping
public String index(){
return "order_add";
}

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 {
@Override
protected 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;
}
}

第二步:进行在xml注册
<bean class="com.wbg.maven1128.exception.MyExceptionResolver"/>

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

2、使用ExceptionHandler注解方式
@Controller
@RequestMapping("/order")
public class OrdersController {
@Autowired
private OrdersService ordersService; @PostMapping(produces = "application/json;charset=utf-8")
@ResponseBody
public String add(Orders orders ) throws Exception {
ordersService.insert(orders);
return "成功";
}
@GetMapping
public 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");
}

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)
@ResponseBody
public String handlerDbException3 () {
return "ksjfksd";
}
@ExceptionHandler(DbException.class)
@ResponseStatus(value = HttpStatus.URI_TOO_LONG)
@ResponseBody
public String DbException3 () {
return "ksjfksd";
}
@ExceptionHandler(RuntimeException.class)
public String handlerDbException4 () {
return "runtime";
}
}


测试:

spring异常+自定义以及使用的更多相关文章
- 利用Spring AOP自定义注解解决日志和签名校验
转载:http://www.cnblogs.com/shipengzhi/articles/2716004.html 一.需解决的问题 部分API有签名参数(signature),Passport首先 ...
- spring AOP自定义注解方式实现日志管理
今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...
- spring AOP自定义注解 实现日志管理
今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...
- (转)利用Spring AOP自定义注解解决日志和签名校验
一.需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法. 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如: ...
- Spring Security 自定义登录认证(二)
一.前言 本篇文章将讲述Spring Security自定义登录认证校验用户名.密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Se ...
- Spring Boot自定义Redis缓存配置,保存value格式JSON字符串
Spring Boot自定义Redis缓存,保存格式JSON字符串 部分内容转自 https://blog.csdn.net/caojidasabi/article/details/83059642 ...
- Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践
Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践 本篇博文主要提供一个在 SpringBoot 中自定义 kafka配置的实践,想象这样一个场景:你的系统 ...
- Spring异常抛出触发事务回滚
Spring.EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的回滚 /** * 如果在spring事务配置中不为切入点(如这里的切入点可以定义成test*) ...
- spring中自定义Event事件的使用和浅析
在我目前接触的项目中,用到了许多spring相关的技术,框架层面的spring.spring mvc就不说了,细节上的功能也用了不少,如schedule定时任务.Filter过滤器. intercep ...
随机推荐
- 字典表+委托替代switch解决思路
参考:http://www.jianshu.com/p/8887b3b3e8ba 代码 namespace 解决Switch { class Program { delegate string fun ...
- Sublime Text加上Eclipse
打造属于自己的前端开发神器 -- 给Sublime Text加上Eclipse的光环 将Sublime Text打造成如Eclipse一般的前端开发IDE 1. 快捷键移植篇 从Java开 ...
- nyoj 600——花儿朵朵——【离散化、线段树插线问点】
花儿朵朵 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 春天到了,花儿朵朵盛开,hrdv是一座大花园的主人,在他的花园里种着许多种鲜花,每当这个时候,就会有一大群游 ...
- docker-compose 安装solr+ikanalyzer
docker-compose.yml version: '3.1' services: solr: image: solr restart: always container_name: solr p ...
- sql 创建用户脚本
USE master go CREATE LOGIN jiazhuang --用户名 WITH PASSWORD = 'sa', --密码 DEFAULT_DATABASE = JiaZhuan, ...
- frp使用总结
笔者所知并成功实现内网穿透的方法: 花生壳 (需要花8块钱,使用花生壳给的二级域名,这里不做介绍) ngrok (免费,但是每次重启服务二级域名会变,付费的$5每月不会变) frp(开源免费,需要有自 ...
- C# ADO.NET 面向对象
ADO.NET跟面向对象的结合 把面向对象跟数据库连接用 在项目里面创建一个新的文件夹 名字为App_Code 在这个App_Code里面创建几个类 主要为拆分问题,标上序号,先干什么在干什么 实 ...
- 了解WaitForSingleObject中WAIT_ABANDONED 返回值
1.互斥量内核对象 互斥量内核对象用来确保一个线程独占对一个资源的访问.互斥量对象包含一个使用计数.线程ID以及递归计数.互斥量与关键段的行为完全相同.但是互斥量是内核对象,而关键段是用户模式下的同步 ...
- 虚拟机配置静态 IP 以后无法连接的解决办法
问题描述 将虚拟机内部 IP 地址从动态获取改成静态 IP 以后,远程连接失败. 问题分析 Azure 虚拟机的内部 IP 默认为动态分配, 由 DHCP 服务自动分配, 在虚拟机的生命周期内, 该 ...
- 将CSV文件中的数据导入到SQL Server 数据库中
导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...