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 ...
随机推荐
- Docker的基本构架
不多说,直接上干货! Docker的基本构架 Docker基于Client-Server架构,Docker daemon是服务端,Docker client是客户端. Docker的基本架构,如下图所 ...
- ife task0003学习笔记(四):JavaScript构造函数
JavaScript创建对象主要是3种方法:工厂模式.构造函数模式.原型模式.其实对于构造函数的概念,我们并不陌生.在之前学习c++语言的时候,也有提到过构造函数的概念.除了创建对象,构造函数(con ...
- JDBC的PreparedStatement启动事务使用批处理executeBatch()
JDBC使用MySQL处理大数据的时候,自然而然的想到要使用批处理, 普通的执行过程是:每处理一条数据,就访问一次数据库: 而批处理是:累积到一定数量,再一次性提交到数据库,减少了与数据库的交互次数, ...
- Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记
Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...
- HDU 4027—— Can you answer these queries?——————【线段树区间开方,区间求和】
Can you answer these queries? Time Limit:2000MS Memory Limit:65768KB 64bit IO Format:%I64d & ...
- [转](.NET Core C#) AES Encryption
本文转自:https://www.example-code.com/dotnet-core/crypt2_aes.asp Chilkat.Crypt2 crypt = new Chilkat.Cryp ...
- mvc表单如何绑定bool类型的属性或变量
先来看一组代码: 视图代码: @model MvcTest.Controllers.Test @{ Layout = null; } <!DOCTYPE html> <html> ...
- springboot从入门到精通(二)
这一节我们一起用springboot开发一个应用程序,应用程序里的核心概念是玩家获取英雄列表上的英雄信息. 1.定义实体模型: 代码如下: package com.dota.herolist.enti ...
- MyBatis 中 sqlmapconfig核心标签typeAliases配置说明
标签说明 在 MyBatis 的 sql 映射配置文件中,需要使用 paramterType.resultType 来设置 sql 语句的输入输出参数,一般参数都是基本的数据类型或封装类型,但都需要声 ...
- java集合框架(二):HashTable
HashTable作为集合框架中的一员,现在是很少使用了,一般都是在面试中会问到其与HashMap的区别.为了能在求职的时候用上场,我们有必要对其原理进行解读. HashTable的实现原理跟Hash ...