Spring Boot中对异常的全局处理
步骤:
1.在全局异常处理类中加上注解@ControllerAdvice
2.在方法上使用@ExceptionHandler注解处理对应的异常
3.@ResponseBody可选,使用该注解时,会将返回结果由java对象转为json
例:
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(value = NullPointerException.class)
@ResponseBody
public Map processNullPointerException(NullPointerException e) {
Map<String, Object> map = new HashMap<>();
map.put("errCode", 500);
map.put("errMsg", e.getMessage());
log.error("空指针异常:", e);
return map;
}
@ExceptionHandler(value = NumberFormatException.class)
@ResponseBody
public Map processNumberFormatException(NumberFormatException e) {
Map<String, Object> map = new HashMap<>();
map.put("errCode", 500);
map.put("errMsg", e.getMessage());
log.error("数字格式异常:", e);
return map;
}
@ExceptionHandler(value = IndexOutOfBoundsException.class)
@ResponseBody
public Map processIndexOutOfBoundsException(IndexOutOfBoundsException e) {
Map<String, Object> map = new HashMap<>();
map.put("errCode", 500);
map.put("errMsg", e.getMessage());
log.error("下标越界异常:", e);
return map;
}
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Map processException(Exception e) {
Map<String, Object> map = new HashMap<>();
map.put("errCode", 500);
map.put("errMsg", e.getMessage());
log.error("其它异常:", e);
return map;
}
}