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"; } }
測試: