spring bootにおけるrestインターフェース404 500等のエラーを解決して、統一されたjsonフォーマットに戻る.
5215 ワード
restインターフェースを開発する時、私達はよく統一的な戻りフォーマットを定義します.
{ "status": true, "code": 200, "message": null, "data": [ { "id": "101", "name": "jack" }, { "id": "102", "name": "jason" } ]}
しかし、もし私たちのアプリを呼び出す時にインターフェースアドレスを書き間違えたら、404のエラーが発生します.伝統的なウェブシステムでは、404のエラーページをカスタマイズして、より友好的な展示ができます.spring bootでもjson形式のデータを返しました.以下の通りです.
{ "timestamp": 1492063521109, "status": 404, "error": "Not Found", "message": "No message available", "path": "/rest11/auth"}
どの住所が見つからないか教えてください.実は友好的です.でも、上のユーザー定義のデータフォーマットは下のと一致しないので、ユーザーがこれを持って帰ってきたら識別できないです.その中で一番明らかなのはstatusフィールドです.私達がカスタマイズしたのはブックレンタイプで、成功したかどうかを表しています.
こちらに戻ってくるのがhttpの状態コードです.
このようなシステムエラーが発生した時に、私達がカスタマイズしたフォーマットに戻る必要があります.
異常処理クラスを定義します.
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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;@ControllerAdvicepublic class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * , :404,500 * @param req * @param resp * @param e * @return * @throws Exception */ @ExceptionHandler(value = Exception.class) @ResponseBody public ResponseData defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception { logger.error("", e); ResponseData r = new ResponseData(); r.setMessage(e.getMessage()); if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) { r.setCode(404); } else { r.setCode(500); } r.setData(null); r.setStatus(false); return r; }}
ReponseDataは、私たちがフォーマットに戻るエンティティタイプです.このようなエラーが発生した時には、こちらで捕獲されます.その後、フォーマットに戻して、呼び出し元に戻ります.
最後のステップは、spring bootのプロファイルに以下のような構成を加えることです.
# , spring.mvc.throw-exception-if-no-handler-found=true# spring.resources.add-mappings=false
そして、私達が存在しないインターフェースを呼び出した時、返ってきたエラー情報は私達がカスタマイズしたフォーマットです.{ "status": false, "code": 404, "message": "No handler found for GET /rest11/auth", "data": null}
先生の人工知能教程をもう一度教えてください.ゼロベース!分かりやすい!ユーモア!下ネタも持っていますあなたも私たちの人工知能のチームに加わってほしいです.https://blog.csdn.net/jiangjunshow