レスト・スプリング・ブート・アプリケーションで例外を処理したい。私は、@ControllerAdviceとResponseEntityを使って、私のエラーを表すカスタムオブジェクトを返すことができますが、私が望むのは、Exesting例外の本体に新しいフィールドを追加することです。私はちょうどこのカスタム例外を投げる私のコントローラでは、このようボディ例外のスプリング・レストに新しいフィールドを追加する
@ResponseStatus(HttpStatus.CONFLICT)
public class CustomException extends RuntimeException {
private List<String> errors = new ArrayList<>();
public CustomException(List<String> errors) {
this.errors = errors;
}
public CustomException(String message) {
super(message);
}
public CustomException(String message, List<String> errors) {
super(message);
this.errors = errors;
}
public List<String> getErrors() {
return errors;
}
public void setErrors(List<String> errors) {
this.errors = errors;
}
}
:
@GetMapping("/appointment")
public List<Appointment> getAppointments() {
List<String> errors = new ArrayList<>();
errors.add("Custom message");
throw new CustomException("This is my message", errors);
}
Iを
は、私が余分な属性でのRuntimeExceptionを継承したカスタム例外、文字列のリストを作成しました郵便配達員と私の休憩のエンドポイントをテストする、それは春の起動が私のエラーフィールドをマーシャルしていないようだ、応答は:{
"timestamp": "2017-06-05T18:19:03",
"status": 409,
"error": "Conflict",
"exception": "com.htech.bimaristan.utils.CustomException",
"message": "This is my message",
"path": "/api/agenda/appointment"
}
例外から「パス」フィールドと「タイムスタンプ」フィールドを取得できますが、これら2つの属性のゲッターがない場合は、@ControllerAdviceを使用してカスタムオブジェクトを処理できます。
ありがとうございます。
私は自分のコントローラにこの機能を統合しようとしたが、私はこの例外に私は私のエンドポイントへのコール行われるたびました: org.thymeleaf.exceptions.TemplateInputException:エラーテンプレートを "一般的な/エラー"を解決する、テンプレートが存在しないか、設定されたテンプレートリゾルバでアクセスできない可能性があります – Habchi
私はあなたがRESTエンドポイントを実装していると思います。したがって、ResponseEntityを使用してください。 – YuVi
この解決方法は、質問の投稿で私が話したことです。私はそれを使用することができますが、どのように私はカスタムエラーオブジェクトにそれらを追加することができますので、例外のボディからパスとタイムスタンプ属性を取得できますか? – Habchi