全局异常一般有很多种方式,比如自定义,继承之类的,一般来说,主要还是用2个注解
- @ControllerAdvice
- @ExceptionHandler
抛出异常
package com.jiataoyuan.demo.springboot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeoutException;
/**
* @author TaoYuan
* @version V1.0.0
* @date 2018/4/16 0016
* @description description
*/
@RestController
@RequestMapping("/exception")
public class ExceptionsController {
@GetMapping()
public String Main(){
return "<h1>Exceptions!</h1>";
}
// 抛出异常
@GetMapping("/timeout")
public String throwTimeOutException() throws TimeoutException {
throw new TimeoutException();
}
@GetMapping("/runtime")
public String throwRuntimeException(){
throw new RuntimeException();
}
@GetMapping("/common")
public String throwException() throws Exception {
throw new Exception();
}
}
处理异常
package com.jiataoyuan.demo.springboot.controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import java.util.concurrent.TimeoutException;
/**
* @author TaoYuan
* @version V1.0.0
* @date 2018/4/16 0016
* @description description
*/
@RestControllerAdvice
public class DefaultExceptionAdvice {
//处理异常
// @ExceptionHandler(RuntimeException.class)
// public String RuntimeException(Exception e, WebRequest webRequest){
// return "<p>ExceptionType:" + e + "</p>"
// + "<p>WebRequest:" + webRequest + "</p>";
// }
//
// @ExceptionHandler(TimeoutException.class)
// public String TimeOutException(Exception e, WebRequest webRequest){
// return "<p>ExceptionType:" + e + "</p>"
// + "<p>WebRequest:" + webRequest + "</p>";
// }
@ExceptionHandler(Exception.class)
public String Exception(Exception e, WebRequest webRequest){
return "<p>ExceptionType:" + e + "</p>"
+ "<p>WebRequest:" + webRequest + "</p>";
}
}
基本就是这样了,实际开发过程中,肯定不会这么随意,一般都会继承RuntimeException然后进行细分。