國際化全域性異常處理

2021-09-05 07:01:15 字數 2098 閱讀 5053

正常程式處理異常有兩種:
1.將錯誤資訊return給前端

2.將錯誤資訊已異常形式拋給前端

return與throw的區別:

當在service層處理業務邏輯的時候,所有的業務的**都寫在當前的service方法中的時候,那麼,使用return和throw用起來基本沒啥區別

當在service層處理的業務的時候,還需要呼叫自己封裝的方法的時候,那麼在封裝的方法中return出來的錯誤資訊則還需要經過自己來處理一遍,在返回給前端,這樣就增加了很多無用的操作,這時候用throw丟擲異常就會便捷很多

說明:

通常乙個web程式在執行過程中,由於使用者的操作不當,或者程式的bug,有大量需要處理的異常。其中有些異常是需要暴露給使用者的,比如登陸超時,許可權不足等等。可以通過彈出提示資訊的方式告訴使用者出了什麼錯誤。

而這就表示在程式中需要乙個機制,去處理這些異常,將程式的異常轉換為使用者可讀的異常。而且最重要的,是要將這個機制統一,提供統一的異常處理。

實現:

新增乙個統一異常處理類並且在類上面新增註解 @restcontrolleradvice

然後在類中新建方法,並在方法上面新增註解 @exceptionhandler(value = exception.class),該註解中的value屬性的值為何種異常,那麼就會攔截到這類異常

注:此統一異常只能攔截controller層的異常

對於需要使用者自己捕獲處理的異常呢,則需要用自定義異常,對於無需關心的異常,則可以不用使用自定義異常

自定義異常只需繼承異常類即可

1.在pom檔案中引入jar包

org.springframework.boot<

/groupid>

spring-boot-starter-thymeleaf<

/artifactid>

<

/dependency>

2.在resources檔案中新增國際化資源檔案

3.在spingboot配置檔案中配置國際化:

#國際化配置

messages:

basename: i18n/messages #指定message的basename,多個以逗號分隔,如果不加包名的話,預設從classpath路徑開始,預設: messages

cache-seconds:

-1 #設定載入的資源檔案快取失效時間,-

1的話為永不過期,預設為-

1 encoding: utf-

8 defaultencoding: utf-

8 #當根據語言型別查詢不到資源時,讀取預設資源檔案,預設資源檔案格式設定

4.注入messagesource這個bean

5.呼叫messagesource中的getmessage方法:

messagesource.getmessage(msgname, null, locale)

說明:msgname為資源檔案中的資源id,locale為獲取哪種語言

另外,spring在國際化中還提供了佔位符功能,使用"",使用**:

messageformat format =

newmessageformat

(msg, locale.china)

; object[

] params =

; string message = format.

format

(params)

;

將要替換佔位符的字串用乙個數組裝起來,然後替換掉佔位符,陣列下標對應的就是佔位符的中括號裡的值

6.資源檔案格式

msg = 沒有這個使用者 這個是沒有佔位符的格式 msg代表後面值的id,後面的值就是要翻譯的值

msg = 沒有這個使用者 這個是有佔位符的格式 當你陣列裡有資料的時候,就會將佔位符給替換掉

軟體國際化值頁面國際化

國際化 軟體的國際化 軟體開發時,要使它能同時應對世界不同地區和國家的訪問,並針對不同地區和國家的訪問,提供相應的 符合來訪者閱讀習慣的頁面或資料。國際化又稱為 i18n internationalization 對於軟體中的選單欄 導航條 錯誤提示資訊,狀態資訊等這些固定不變的文字資訊,可以把它們...

外掛程式國際化

外掛程式國際化 在我們的應用中,難免會遇到國際化的問題,eclipse rcp給我們提供了很好的方案,甚至可以在後期批處理完成,但如果是其它外掛程式未提供我們需要的語言版呢?我們可以如何為它們提供語言包呢?乙個簡單的例子,你用messagedialog開啟對話方塊時,按鈕一般時 ok,cancel,...

資源國際化

properties 檔案裡的資源必須經過編碼,不能出現中問,日文等。且必須是ascii 碼。jdk 中bin 資料夾下的native2ascii.exe 可以把資源轉換為ascii 碼。在命令提示符中輸入 native2ascii encoding utf 8 sourcefile targetf...