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 ...
随机推荐
- query的参数解析
SQLiteDatabase dbInstance;Cursor cursor = dbInstance.query(String table,String []Columns, String sel ...
- DBNull.Value.ToString() == string.Empty
Console.WriteLine(DBNull.Value.ToString() == string.Empty); //True
- adb调试安卓
http://blog.csdn.net/liushida00/article/details/49797239
- s-2、charles 入门
本文的内容主要包括: Charles 的简介 如何安装 Charles 将 Charles 设置成系统代理 Charles 主界面介绍 过滤网络请求 截取 iPhone 上的网络封包 截取 Https ...
- SpringBoot | 第三十二章:事件的发布和监听
前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...
- JS预编译详解
我们都知道javascript是解释型语言,执行的特点呢是编译一行,执行一行.按照这个思路有时候我们在运行代码时会有一些令人费解的现象出现.下面我们一起来执行下面三段代码. <script> ...
- Thrift笔记(一)--Hello Demo
Thrift是一个RPC框架 1. 用IDL定义好实体和服务框架,如实体字段名,类型等.服务名,服务参数,返回值等 2. 通过编译器或者说代码生成器生成RPC框架代码 IDL语法,代码生成器的安装使用 ...
- canvas玩转微信红包
CSS3相关属性: <!DOCTYPE html> <html> <head lang='en'> <meta charset='UTF-8'/> &l ...
- alpinelinux
https://wiki.alpinelinux.org/wiki/Tutorials_and_Howtos https://nixos.org/nix/manual/#ch-installing-b ...
- 卸载Gac里被windows installer所reference的assembly的方法
HKEY_LOCAL_MACHINE\Software\Classes\Installer\Assemlies\Global下找到要删除的assembly的那一项, 删除. 然后再gacutil /u ...