您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關springBoot中怎么自定義異常響應,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
1 自定義異常返回json數據、
//不要忘記添加 @ControllerAdvice
@ControllerAdvice
public class myExceptionHandler {
//瀏覽器和客戶端返回的都是json // @ResponseBody
@ExceptionHandler(UserNotExist.class)
public Map<String ,Object> handlerException(Exception e){ Map<String,Object> map = new HashMap<>(); map.put("code","user.notexist"); map.put("message",e.getMessage()); return map;
} }
2 轉發到/error下,進行自適應響應 @ControllerAdvice public class myExceptionHandler {
//瀏覽器和客戶端返回的都是json @ExceptionHandler(UserNotExist.class) public String handlerException(Exception e, HttpServletRequest request){ Map<String,Object> map = new HashMap<>(); request.setAttribute("javax.servlet.error.status_code",500); map.put("code","user.notexist"); map.put("message",e.getMessage()); request.setAttribute("ext",map); return "forward:/error"; }
}
3 將定制的錯誤攜帶出去 @Component
public class myErrorAtrributes extends DefaultErrorAttributes {
//WebRequest webRequest,注意1.x.x版本的寫法與2.1.0寫法不同,我的是2.1.0 public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) { Map<String, Object> errorAttributes = super.getErrorAttributes(webRequest,includeStackTrace); errorAttributes.put("com", "maodong"); Map<String,Object> ext= (Map<String, Object>) webRequest.getAttribute("ext",0); errorAttributes.put("ext",ext); return errorAttributes; }
}
//為啥這么寫:父類DefaultErrorAttributes類中的方法
public Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> errorAttributes = new LinkedHashMap(); errorAttributes.put("timestamp", new Date()); this.addStatus(errorAttributes, webRequest); this.addErrorDetails(errorAttributes, webRequest, includeStackTrace); this.addPath(errorAttributes, webRequest); return errorAttributes; } //為啥WebRequest webRequest能得到與低版本RequestAttrributes相同的結果 public interface WebRequest extends RequestAttributes { @Nullable String getHeader(String var1); @Nullable String[] getHeaderValues(String var1); Iterator<String> getHeaderNames(); ------ } //為啥 Map<String,Object> ext= (Map<String, Object>) webRequest.getAttribute("ext",0);能獲得ext public interface RequestAttributes { int SCOPE_REQUEST = 0; int SCOPE_SESSION = 1; String REFERENCE_REQUEST = "request"; String REFERENCE_SESSION = "session"; @Nullable Object getAttribute(String var1, int var2); void setAttribute(String var1, Object var2, int var3); void removeAttribute(String var1, int var2);
關于springBoot中怎么自定義異常響應就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。