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 ...
随机推荐
- Java实现Ip代理池
设置Ip代理很多时候都会有用到,尤其是在写爬虫相关项目的时候.虽然自己目前没有接触这种需求,但由于最近比较闲,就写着当作练习吧 爬取代理IP 爬取 关于爬取代理IP,国内首先想到的网站当然是 西刺代理 ...
- Beyond Compare 4试用期已过
Beyond Compare 很好用,但是只有一段时间的试用时间,当试用期过了之后就提示不能试用了 怎么办呢? 我在网上找到了两个方法: 1.直接用注册码(来自:https://blog.csdn.n ...
- BNU27935——我爱背单词——————【数组模拟】
我爱背单词 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: ...
- 1个示例 学会 mvc 常用标签
HtmlHelper用法大全3:Html.LabelFor.Html.EditorFor.Html.RadioButtonFor.Html.CheckBoxFor @Html.***For:为由指定 ...
- 3、Angular2 Input
3.理解@input
- 那些你常用的JSP知识
脚本程序 <> 或者,您也可以编写与其等价的XML语句,就像下面这样: <jsp:scriptlet> 代码片段 </jsp:scriptlet>任何文本.HTML ...
- JavaWeb技术
1.简介 Java Web是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet,不过使用得很少,Java在 ...
- vue 上拉加载更多
var _this=this; var goods_id = _this.$route.query.id; var isscroll = true; _this.$nextTick(() => ...
- 破解Power Designer 12.5
PowerDesigner15.1破解补丁链接: https://pan.baidu.com/s/1boJoT6B 密码: 9x77 解压,将文件 pdflm15.dll替换安装目录的同名文件即可.
- C语言实现一元多项式求积
#include <stdio.h>#include <stdlib.h>#include <math.h>typedef struct Node{ int ...