あなたは、次のいくつかの注意事項を知っておく必要があります
1. @ControllerAdvice:通知コントローラ設定
グローバルコントローラの@ControllerAdvice注釈によっては、同じ位置に配置されてもよい
注釈メソッドクラスがメソッドに@ControllerAdvice @ exceptionHandlerの、@ InitBinder、@ ModelAttributeアノテーションを使用してもよいです。
@ExceptionHandler:異常のグローバルプロセスコントローラ。
@InitBinder:モデルを結合するための要求パラメータの自動受信のために、WebDataBinderを設定するために使用されます。
@ModelAttribute:もともと役割は、グローバル@RequestMappingのために、ここで設定したキーにアクセスできる必要がありましょうここでは、モデルにキーと値のペアをバインドすることです
上のすべての注釈付きメソッドの@RequestMappingコントローラに@ControllerAdvice注釈の役割を。
@ControllerAdvice(注釈= RestController.class)コントローラ注釈付き@RestControllerへのすべてのポイント
2. @ResponseBody:@ResponseBodyはResponseBody手段@、プロセスに作用しているが、使用後に@RequestMapping、直接書き込みHTTPレスポンスボディに処理結果を返す、戻り値は、通常ジャンプパスとしてではなく、@ResponseBodyで解決されます結果を返した後にジャンプパスとして解釈されないが、直接HTTPレスポンスボディに書き込ま。このような非同期のget JSONデータとして、@ResponseBodyを追加した後、それが直接JSONデータを返します。@RequestBody挿入プロセスHTTPリクエストボディ、適当HttpMessageConverter書き込み要求対象体を使用。
3. @ExceptionHandler:単一の例外の種類は、それによってコード反復率の複雑さを減少させ
2つの方法で4 @ResponseStatusノートは、1は、1つのターゲットメソッドに追加され、カスタム例外クラスにロードされている
二つのパラメータがあるノート、我々は最初のターゲットメソッドクラスについては、プラス、この場合、話します、valueプロパティ異常ステータスコードは、reaseon説明は、異常である
のみ示すステータスコードを返した場合、それが理由属性を追加することが最善ではありません。
あなたは、属性の理由を追加し、その理由は「」ではなく、コード> 0(ステータスコードが200であっても)場合は、現在の要求は、エラー処理を移動します。
例外情報エンティティ
@Data
public class ApiResult implements Serializable {
/**
* @Fields serialVersionUID :
*/
private static final long serialVersionUID = -1450204351804859591L;
private ApiResult() {};
public static ApiResult newInstance() {
return new ApiResult();
}
private String msg;
private boolean flag;
private Object object;
}
異常復帰情報の構築
public final class ApiResultGenerator {
public static ApiResult result(boolean flag, String msg, Object object, Throwable throwable) {
ApiResult apiResult = ApiResult.newInstance();
apiResult.setFlag(flag);
apiResult.setMsg(msg == "" ? "success" : msg);
apiResult.setObject(object);
return apiResult;
}
public static ApiResult successResult(Object object) {
return result(true, "", object, null);
}
public static ApiResult errorApiResult(String msg, Throwable throwable) {
return result(false, msg, "", throwable);
}
}
すべてRestControllerの異常インターセプト
//@ControllerAdvice注解是用来配置控制器通知的
//@ControllerAdvice的annotations属性值为RestController.class,
//也就是只有添加了@RestController注解的控制器才会进入全局异常处理
@ControllerAdvice(annotations = RestController.class)
@ResponseBody
public class RestExceptionHandler {
//来配置需要拦截的异常类型,默认是全局类型
@ExceptionHandler
//配置遇到该异常后返回数据时的StatusCode的值
@ResponseStatus
public ApiResult runTimeExceptionHandler(Exception exception) {
return ApiResultGenerator.errorApiResult(exception.getMessage(), exception);
}
}