グローバルな例外処理
package com.van.mall.common;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author Van
* @date 2020/3/24 - 10:49
*/
@Slf4j
@ControllerAdvice
public class ExceptionHandler {
@org.springframework.web.bind.annotation.ExceptionHandler(value = Exception.class)
@ResponseBody
public ServerResponse handler(Exception e){
log.error("system error",e);
return ServerResponse.error("zero can divide");
}
}
説明:
@ControllerAdviceは、それがグローバル例外クラスであることを識別するために使用されます。
@ ExceptionHandlerは、キャッチする例外クラスを識別します。ここで例外が使用され、例外である限り、すべてがキャッチされます(すべての例外がExceptionから継承されるため)
@ResponseBody ID、I返すのはビューではなくjsonです。
このメソッドでは、このメソッドで例外が渡されるため、メソッドにException eパラメータを追加する必要があります。
カスタム例外
package com.van.mall.common;
import lombok.Data;
/**
* @author Van
* @date 2020/3/24 - 10:55
*/
@Data
public class ZeroException extends RuntimeException {
private String message;
private int code;
public ZeroException(String message, int code) {
super(message);
this.code = code;
}
}
説明:
カスタム例外は、RuntimeExceptionを直接継承します。メッセージとコードの2つのメンバーが必要であり、設定する必要があります。また、コンストラクター(コンストラクタースーパーが直接親クラスのコンストラクターを呼び出してメッセージに値を割り当てる)
を使用する場合直接スロー新しいZeroException(「0は除数として使用できません」、-1)