日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

怎样用springboot开发cs_springboot开发之配置自定义的错误界面和错误信息

發布時間:2025/3/21 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎样用springboot开发cs_springboot开发之配置自定义的错误界面和错误信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何定制錯誤頁面?

(1)在有模板引擎的情況下:在template文件夾下的error/狀態碼;即將錯誤頁面命名為:錯誤狀態碼.html放在template文件夾里面的error文件夾下,發生此狀態碼的錯誤會來到對應的頁面。

頁面可以獲得的信息:

timestamp:shiajianc

status:狀態碼

error:錯誤提示

exception:異常對象

message:異常消息

errors:JSR303數據校驗的錯誤都在這里

(2)如果沒有模板引擎,就在靜態資源文件static下的error文件夾下找。

(3)如果都沒有,則返回系統的默認錯誤頁面。

在錯誤頁面可以這么獲取到數據:

status:[[${status}]]

timestamp:[[${timestamp}]]

如何定制錯誤的json數據?

首先我們在com.gong.springbootcurd下新建一個exception文件夾,該文件夾中定義一個異常:UserNoExistException.java

packagecom.gong.springbootcurd.exception;public class UserNotExistException extendsRuntimeException {publicUserNotExistException() {super("用戶不存在");

}

}

然后在com.gong.springbootcurd.component下新建一個異常處理器:MyExceptionHandler.java

packagecom.gong.springbootcurd.component;importcom.gong.springbootcurd.exception.UserNotExistException;importorg.springframework.web.bind.annotation.ControllerAdvice;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.bind.annotation.ResponseBody;importjavax.servlet.http.HttpServletRequest;importjava.util.HashMap;importjava.util.Map;

@ControllerAdvicepublic classMyExceptionHandler {//1、瀏覽器客戶端返回的都是json

@ResponseBody

@ExceptionHandler(UserNotExistException.class)public MaphandleException(Exception e){

Map map = new HashMap<>();

map.put("code","user.notexist");

map.put("message",e.getMessage());returnmap;

}

}

在com.gong.springbootcurd.controller的HelloController.java中添加:

@ResponseBody

@RequestMapping("/hello")public String hello(@RequestParam("user") String user){if(!user.equals("aaa")){throw newUserNotExistException();

}return "hello world";

}

我們在服務器種模擬請求:

會顯示我們自定的json錯誤信息。

如何設置自適應的顯示錯誤頁面?

也就是說瀏覽器顯示的就是錯誤頁面,而客戶端顯示的是json的錯誤信息。

修改MyExceptionHandler.java里面為:

@ExceptionHandler(UserNotExistException.class)publicString handleException(Exception e, HttpServletRequest request){

Map map = new HashMap<>();//傳入我們自己的錯誤狀態碼 4xx 5xx

/*** Integer statusCode = (Integer) request

.getAttribute("javax.servlet.error.status_code");*/request.setAttribute("javax.servlet.error.status_code",500);

map.put("code","user.notexist");

map.put("message","用戶出錯啦");

request.setAttribute("ext",map);//轉發到/error

return "forward:/error";

}

需要注意的是我們必須要設置響應的狀態碼,最后轉發到錯誤error請求。

在自己定義的5xx.html中可以這么獲取信息了:

status:[[${status}]]

timestamp:[[${timestamp}]]

exception:[[${exception}]]

message:[[${message}]]

ext:[[${ext.code}]]

ext:[[${ext.message}]]

當訪問http://localhost:8080/curd/hello?user=aa時,會看到:

這里exception獲取不到???暫時還不知道什么原因。

如何定制自己的錯誤信息到頁面中?

向上述的ext.code和 ext.message是我們異常處理器給我們帶的字段,如果我們想新增自己的字段:

在com.gong.springbootcurd.component中新建一個MyErrorAttributes.java

packagecom.gong.springbootcurd.component;importcom.gong.springbootcurd.exception.UserNotExistException;importorg.springframework.boot.web.servlet.error.DefaultErrorAttributes;importorg.springframework.stereotype.Component;importorg.springframework.web.context.request.RequestAttributes;importorg.springframework.web.context.request.WebRequest;importjava.util.Map;//給容器中加入我們自己定義的ErrorAttributes

@Componentpublic class MyErrorAttributes extendsDefaultErrorAttributes{//返回值的map就是頁面和json能獲取的所有字段

public Map getErrorAttributes(WebRequestrequestAttributes, booleanincludeStackTrace) {

Map map = super.getErrorAttributes(requestAttributes, includeStackTrace);//map.put("exception", UserNotExistException.class.getName());

map.put("company","gong");//我們的異常處理器攜帶的數據

Map ext = (Map) requestAttributes.getAttribute("ext", 0);

map.put("ext",ext);returnmap;

}

}

說明:我們先從請求域中得到與系統默認的錯誤相關的屬性,然后再添加自己定義的屬性,最后從請求域中得到自定義異常處理器中的屬性,全部都傳給map進行返回。對于沒有打印出來的exception,我們可以這么進行處理,在自定義的異常處理器中:

map.put("exception",e.getClass().getName());

我們自己來獲得異常的名字,然后傳給exception,只不過最后我們在5xx.html中這么取值:

status:[[${status}]]

timestamp:[[${timestamp}]]

exception:[[${exception}]]

error:[[${error}]]

message:[[${message}]]

company:[[${company}]]

ext:[[${ext.code}]]

ext:[[${ext.message}]]

ext:[[${ext.exception}]]

最后在瀏覽器輸入:loclahost:8080/curd/hello?user=aa

總結

以上是生活随笔為你收集整理的怎样用springboot开发cs_springboot开发之配置自定义的错误界面和错误信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。