package demo.utils;
import com.alibaba.fastjson.JSON;
import demo.controller.ProductController;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
* Controller全局錯誤捕獲類
*/
@RestControllerAdvice //攔截異常並統一處理
public class ExceptionIntercept {
public static final String PLAT_ERROR = "PLAT_ERROR";
// Logger和LogManager導入的是org.apache.logging包
private static final Logger logger = LogManager.getLogger(ProductController.class);
@ExceptionHandler(Exception.class)
public MessagePack handler(Exception ex) {
//返回錯誤數據包
MessagePack pack = new MessagePack();
pack.setCode(MessagePack.ERROR);
pack.setMessage(ex.getMessage());
pack.setStatus(PLAT_ERROR);
//同時記錄錯誤日志
logger.error("Controller全局錯誤捕獲類==>" + JSON.toJSONString(pack));
return pack;
}
}
package demo.utils;
import java.io.Serializable;
/**
* 統一返回消息類
*/
public class MessagePack implements Serializable {
public static final long OK = 0;
public static final long ERROR = -1;
// 狀態碼
private long code;
// 信息
private String message;
// 攜帶的值
private Object object;
// 狀態信息
private String status;
public long getCode() {
return code;
}
public void setCode(long code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}