spring異常+自定義以及使用


1、首先自定義異常

DataException:

package com.wbg.maven1128.exception;

public class DataException extends Exception {
    public DataException(){

    }
    public DataException(String msg){
            super(msg);
    }
}
View Code

DbException:

package com.wbg.maven1128.exception;

public class DbException extends Exception {

    public DbException(){

    }
    public DbException(String msg){
        super(msg);
    }
}
View Code

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";
    }
View Code

 

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;
    }
}
View Code

  第二步:進行在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");
    }
View Code

 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";
    }
}
View Code

 

 

測試:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM