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异常+自定义以及使用的更多相关文章

  1. 利用Spring AOP自定义注解解决日志和签名校验

    转载:http://www.cnblogs.com/shipengzhi/articles/2716004.html 一.需解决的问题 部分API有签名参数(signature),Passport首先 ...

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

    今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...

  3. spring AOP自定义注解 实现日志管理

    今天继续实现AOP,到这里我个人认为是最灵活,可扩展的方式了,就拿日志管理来说,用Spring AOP 自定义注解形式实现日志管理.废话不多说,直接开始!!! 关于配置我还是的再说一遍. 在appli ...

  4. (转)利用Spring AOP自定义注解解决日志和签名校验

    一.需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法. 第一种实现方式(Origin):在需要签名校验的接口里写校验的代码,例如: ...

  5. Spring Security 自定义登录认证(二)

    一.前言 本篇文章将讲述Spring Security自定义登录认证校验用户名.密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Se ...

  6. Spring Boot自定义Redis缓存配置,保存value格式JSON字符串

    Spring Boot自定义Redis缓存,保存格式JSON字符串 部分内容转自 https://blog.csdn.net/caojidasabi/article/details/83059642 ...

  7. Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践

    Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践 本篇博文主要提供一个在 SpringBoot 中自定义 kafka配置的实践,想象这样一个场景:你的系统 ...

  8. Spring异常抛出触发事务回滚

    Spring.EJB的声明式事务默认情况下都是在抛出unchecked exception后才会触发事务的回滚 /** * 如果在spring事务配置中不为切入点(如这里的切入点可以定义成test*) ...

  9. spring中自定义Event事件的使用和浅析

    在我目前接触的项目中,用到了许多spring相关的技术,框架层面的spring.spring mvc就不说了,细节上的功能也用了不少,如schedule定时任务.Filter过滤器. intercep ...

随机推荐

  1. Open Closed Principle(OCP)开闭原则

    面向对象的最基本原则 Software entites like classes,modules and functions should be open for extension but cloa ...

  2. html5中新增的语义化的标签

    html5是html最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定.目标是取代1999年所制定的HTML 4.01和XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络 ...

  3. Charts in Ionic

    Chart对于任何应用来说都是不可或缺的一部分,hybrid app也是如此. 先罗列一下有哪些可用的Chart library: D3.JS -- Data-Driven Documents,BSD ...

  4. linux_api之高级IO

    本篇索引: 1.引言 2.非阻塞IO 3.记录锁(文件锁) 4.io多路复用(I/O multiplexing ) 5.异步IO 6.存储映射IO 1.引言 我们第三篇学习了对IO的open.read ...

  5. elasticSearch请求流程图

  6. thinkphp执行流程

    1. 入口文件index.php 用户对url的访问首先被定位到http://<serverIp>/<appName>/index.php, 这里的入口文件index.php做 ...

  7. ASTreeView Demo:Add, Edit & Delete nodes

    http://www.jinweijie.com/ http://www.astreeview.com/astreeviewdemo/astreeviewdemo1.aspx 選擇節點: <sc ...

  8. 使用jquery去掉时光轴头尾部的线条

    一.前言:以前做类似时光轴的结构,几乎都是一条灰色线飞流直下,没有尽头.今天这个线条是从第一个圆点到最后一个圆点,那么问题来了,内容的高度还不是固定的,线条的长度怎么确定?怎么就能刚刚好从第一个点到最 ...

  9. microkernel architecture - Proxy

    The microkernel architecture pattern allows you to add additional application features as plug-ins t ...

  10. ANR android

    1.android ANR产生原因和解决办法 2.Android ANR异常及解决方法 3.Android ANR 分析解决方法 4.[原创]Android 系统稳定性 - ANR(一) 5.[原创] ...