溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

springboot 接口 404 500 頁面 用 json格式返回

發(fā)布時(shí)間:2020-07-14 20:27:22 來源:網(wǎng)絡(luò) 閱讀:354 作者:fhspringcloud 欄目:編程語言

在開發(fā)rest接口時(shí),我們往往會(huì)定義統(tǒng)一的返回格式,列如:

{
??"status":?true,
??"code":?200,
??"message":?null,
??"data":?[
????{
??????"id":?"101",
??????"name":?"jack"
????},
????{
??????"id":?"102",
??????"name":?"jason"
????}
??]
}

但是如果調(diào)用方請求我們的api時(shí)把接口地址寫錯(cuò)了,就會(huì)得到一個(gè)404錯(cuò)誤,在傳統(tǒng)的web系統(tǒng)中我們可自定義404錯(cuò)誤頁面,展示更友好。

在spring boot中其實(shí)也是返回了一個(gè)json格式的數(shù)據(jù),如下:

{
??"timestamp":?1492063521109,
??"status":?404,
??"error":?"Not?Found",
??"message":?"No?message?available",
??"path":?"/rest11/auth"
}

告訴我們哪個(gè)地址是沒找到,其實(shí)也挺友好的,但是因?yàn)槲覀兩厦孀远x的數(shù)據(jù)格式跟下面的不一致,當(dāng)用戶拿到這個(gè)返回的時(shí)候是無法識別的,其中最明顯的是status字段。

我們自定義的是boolean類型,表示是否成功

這邊返回的就是http的狀態(tài)碼

所以我們需要在發(fā)生這種系統(tǒng)錯(cuò)誤時(shí)也能返回我們自定義的那種格式

定義一個(gè)異常處理類

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;

官網(wǎng)?:www.1b23.com
?
@ControllerAdvice
public?class?GlobalExceptionHandler?{
????private?Logger?logger?=?LoggerFactory.getLogger(GlobalExceptionHandler.class);
?
????/**
?????*?系統(tǒng)異常處理,比如: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;
????}
}

ResponseData是我們返回格式的實(shí)體類

這種在發(fā)生錯(cuò)誤時(shí)這邊會(huì)捕獲到,然后封裝好返回格式,返回給調(diào)用方

最后關(guān)鍵的一步是在spring boot的配置文件中加上如下配置:

#出現(xiàn)錯(cuò)誤時(shí),?直接拋出異常
spring.mvc.throw-exception-if-no-handler-found=true
#不要為我們工程中的資源文件建立映射
spring.resources.add-mappings=false

然后我們調(diào)用一個(gè)不存在的接口時(shí),返回的錯(cuò)誤信息就是我們自定義的那種格式了

{
??"status":?false,
??"code":?404,
??"message":?"No?handler?found?for?GET?/rest11/auth",
??"data":?null
}



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI