视频地址
为了方便在控制台查看异常信息可以再返回异常的时候,输出log日志。
package com.imooc.handle;
import com.imooc.domain.Result;
import com.imooc.exception.GirlException;
import com.imooc.utils.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RestController;
@ControllerAdvice
public class ExceptionHandle {
private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
//要捕获的异常种类
@ExceptionHandler(value = Exception.class)
//由于返回的是json格式 而且@ControllerAdvice上面没注解@RestController所以要写ResponseBody
@ResponseBody
public Result handle(Exception e) {
//Exception类型判断
if (e instanceof GirlException) {
//写一个自己的Exception
GirlException girlException = (GirlException) e;
return ResultUtil.error(girlException.getCode(), girlException.getMessage());
}else {
logger.error("【系统异常】{}", e);
return ResultUtil.error(-1, "未知错误");
}
}
}
之前有总结过
可以把返回的异常统一管理起来枚举enum。以后异常的code和message可以在这里统一管理。
好处:未来异常提示信息需要改变的时候,可以在这里统一修改减少维护的工作量提高工作效率。
package com.imooc.enums;
/**
* 返回信息枚举
* @author wdh
*/
public enum ResultEnum {
UNKONW_ERROR(-1, "未知错误"),
SUCCESS(0, "成功"),
PRIMARY_SCHOOL(100, "我猜你可能还在上小学"),
MIDDLE_SCHOOL(101, "你可能在上初中"),
;
private Integer code;
private String msg;
ResultEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}