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