異常統一處理的一些思路
1.AppException 統一處理所有異常
//將出現的所有異常都用AppException
public class AppException extends Exception {
public int statusCode;
public String responseMessage;
public AppException(int status, String responseMessage) {
super(responseMessage);
this.statusCode = status;
this .responseMessage = responseMessage;
}
public AppException(String detailMessage) {
super(detailMessage);
}
}
//像這樣替換
@Override
public T parse(HttpURLConnection connection,OnProgressUpdatedListener listener) throws AppException {
try {
int status = connection.getResponseCode();
if (status == HttpStatus.SC_OK) {
......
}else {
//都看作是聯網失敗
throw new AppException(status,connection.getResponseMessage());
}
} catch (Exception e) {
throw new AppException(e.getMessage());
}
}
2.常見的異常
所有異常
引數錯誤,403
伺服器錯誤,500
伺服器返回json格式不正確,導致反序列化不成功
APPException還可以加在其它地方,eg,請求之前判斷URL是否正確
if (!URLUtil.isNetworkUrl(request.url)) {
throw new AppException("the url :" + request.url + " is not valid");
}
//public static boolean isNetworkUrl(String url) {
if (url == null || url.length() == 0) {
return false;
}
return isHttpUrl(url) || isHttpsUrl(url);
}
3.token 失效的解決思路
考慮這樣一種場景,當User登入之後很長一段時間都不用登入
方案很多:cookie、session、token
這裡看一下 token:
當User登入之後,伺服器會返回一個token的字串,這個字串是一個UserID + 其它資訊的一個MD5
把這個token記錄下來,以後所有的請求都會加上這個token,把它解密出來判斷是否失效,沒有失效,回取出對應ID的所有資料
失效,返回403 + token 失效
//框架裡面會寫介面,還有請求佇列中,我的是Request和RequestTask
public interface OnGlobalExceptionListener {
//處理類似 token 失效這類的Exception,錯誤程式碼403
boolean handleException(AppException exception);
}
//Request
public OnGlobalExceptionListener onGlobalExceptionListener;
public void setGlobalExceptionListener(OnGlobalExceptionListener onGlobalExceptionListener) {
this.onGlobalExceptionListener = onGlobalExceptionListener;
}
//RequestTask
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
if (o instanceof AppException) {
if (request.onGlobalExceptionListener != null){
if(!request.onGlobalExceptionListener.handleException((AppException)o)){
request.iCallback.onFailure((AppException) o);
}
}
} else {
request.iCallback.onSuccess(o);
}
}
4.自己處理
public class BaseActivity extends ActionBarActivity implements OnGlobalExceptionListener {
@Override
public boolean handleException(AppException e) {
if (e.statusCode == 403) {//伺服器拒絕訪問
if("token invalid".equals(e.responseMessage)) {
// TODO relogin
return true;
}
}
return false;
}
}
@Override
public void onFailure(AppException e) {
if (e.statusCode == 403) {
if ("password incorrect".equals(e.responseMessage)) {
// TODO
} else if ("token invalid".equals(e.responseMessage)) {
// TODO relogin
}
}
e.printStackTrace();
}
相關推薦
異常統一處理的一些思路
1.AppException 統一處理所有異常 //將出現的所有異常都用AppException public class AppException extends Exception {
java異常統一處理
出現 actor 錯誤 統一處理 type .get 。。 cfa getc 一般系統拋出的錯誤不含錯誤代碼,出去部分的404,500,400之外,我們如果想吧錯誤代碼定義的更細致,就需要自己繼承RuntimeExeption這個類後,重新定義構造方法定義自己的錯誤信息。
Spring MVC異常統一處理的三種方式
Spring 統一異常處理有 3 種方式,分別為: 使用 @ ExceptionHandler 註解 實現 HandlerExceptionResolver 介面 使用 @controlleradvice 註解 HandlerExceptionReso
spring boot 系統異常統一處理
1.系統異常捕獲 @ControllerAdvice(annotations = {RestController.class}) public class GlobalExceptionHandler { private Logger logger = LoggerFactory.get
spring mvc異常統一處理(實現HandlerExceptionResolver介面)不生效的問題解決
spring mvc異常統一處理常見的有3種方式: 使用 @ ExceptionHandler 註解 實現 HandlerExceptionResolver 介面 使用 @controlleradvice 註解 詳細的使用方法可參考博文:https://blog.c
SpringBoot異常統一處理機制
springboot官網說了三種異常處理,分為機器客戶端和瀏覽器客戶端,區別為機器客戶端請求返回的是頭中Accept是"/"或者空,異常返回值json,瀏覽器客戶端請求頭中Accept是"text/html" 返回的是html 如下圖: 機器客戶端: 瀏覽器客戶端: 下面
Springboot-系統異常統一處理(介面程式設計異常處理)
Springboot-系統異常統一處理(介面程式設計異常) 1. 系統異常捕獲 /** * 全域性異常處理 * @Author: wangxc * @GitHub: https://github.com/vector4wang * @CS
基於spring aop的dubbo異常統一處理
dubbo統一異常處理,呼叫方只顯示封裝後的異常。 1、返回封裝後的Exception 2、返回封裝後的統一返回資訊 import org.aspectj.lang.annotation.AfterT
spring mvc異常統一處理(使用ControllerAdvice註解)
1、配置 spring 版本: [html] view plain copy print? <org.springframework-version>4.1.9.RELEASE</org.springframework-version>
Spring MVC異常統一處理(包括普通請求異常以及ajax請求異常)
通常SpringMVC對異常的配置都是返回某個jsp檢視給使用者,但是通過ajax方式發起請求,即使發生異常,前臺也無法獲得任何異常提示資訊。因此需要對異常進行統一的處理,對於普通請求以及ajax請求的異常都有效。 1.Spring MVC的異常處理機制 Spring
Springboot專案全域性異常統一處理
最近在做專案時需要對異常進行全域性統一處理,主要是一些分類入庫以及記錄日誌等,因為專案是基於Springboot的,所以去網路上找了一些部落格文件,然後再結合專案本身的一些特殊需求做了些許改造,現在記錄下來便於以後檢視。在網路上找到關於Springboot全域性異常統一處理的
Spring MVC異常統一處理(異常資訊的國際化,日誌記錄)
JAVA EE專案中,不管是對底層的資料操作,還是業務層的處理過程,還是控制層的處理,都不可避免的會遇到各種可預知的(業務異常主動丟擲)、不可預知的異常需要處理。一般dao層、service層的異常都會直接丟擲,最後由controller統一進行處理,每個過程
Spring MVC異常統一處理
/** * 自定義返回結果封裝類 */public class ResultUtil implements Serializable {private static final long serialVersionUID = 1L;private Integer code;private String msg
spring Aop實現身份驗證和springboot異常統一處理
文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關注我的微信公眾號:好好學java,獲取優質學習資源。 一、spring Aop身份驗證 一般,如果使用者沒有登入的話,使用者只可以檢視商品,但是其他的,比如支付等是不能夠進行操作的,這個時候,我們
SpringMVC全域性異常統一處理
(1)使用Spring MVC提供的簡單異常處理器SimpleMappingExceptionResolver:<!-- springmvc提供的簡單異常處理器 --> <be
@ControllerAdvice自定義異常統一處理
正常來說一個系統肯定有很多業務異常。而這些業務異常的資訊如何返回給前臺呈現給使用者。比如使用者的某些操作不被允許,需要給使用者提示。 Spring 提供了@ControllerAdvice這個註解,這個註解可以實現全域性異常處理,全域性資料繫結,全域性資料預處理,這裡主要說下使用這個註解實現全域性異常處理。
Web層框架對網站中所有異常的統一處理
配置文件 數據安全 攔截器 網站 如何 一個網站的異常信息作為專業的人士,是不會輕易暴露給用戶的,因為那樣狠不安全,顯得你漏是一回事,只要還是考慮到網站的數據安全問題,下面給大家分享一下一些常見的web層框架是如何處理統一的異常。 之前都是在Struts2的配置文件中配置攔截器
人臉美白廋臉磨皮自動的化處理的一些思路(機器視覺)
項目 原則 htm 功能 gpo 過程 warp 做到 細節 分享一下思路,自己也驗證過了,應該靠譜 流程 1.人臉檢測加特征點定位 2.根據特征點進行廋臉之類的操作(根據定位點可以做更多好玩的東西,類似faceu的功能也可以實現) 3.美白皮膚 4.磨皮皮膚 原則上不放代
springboot(3)——整合freemarker模板、AOP統一處理、全域性異常處理
《三》、整合freemarker模板、AOP統一處理、全域性異常處理 一、整合freemarker模板引擎 1、引入freemarker依賴 <dependency> <groupId>org.springframe
Javaweb異常提示資訊統一處理
Java異常封裝(自己定義錯誤碼和描述,附原始碼) 2016年01月29日 22:30:54 小寶鴿 閱讀數:23262 標籤: java異常 更多 個人分類: Java基礎