国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springBoot2.X配置全局捕獲異常的操作

springBoot2.X配置全局捕獲異常的操作

2021-10-26 10:12劉翊揚 Java教程

這篇文章主要介紹了springBoot2.X配置全局捕獲異常的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

springBoot2.X配置全局捕獲異常

先來看一段代碼:當傳入的id是0的時候,就會報異常。

 @RestController public class HelloController { @GetMapping("/getUser") public String getUser(int id) { int j = 1 / id; return "SUCCESS" + j; } }

訪問時:

springBoot2.X配置全局捕獲異常的操作

我們知道這個頁面要是給用戶看到,用戶可能不知道這是什么。

方法一:將異常捕獲

 @GetMapping("/getUser") public String getUser(int id) { int j; try { j = 1 / id; } catch (Exception e) { return "系統異常"; } return "SUCCESS" + j; }

這種方法當然可以,但是當我們有很多方法時,需要在每個方法上都加上。

哎,太雞肋了吧。

那么都沒有全局的攔截處理呢?

當然了

方法二:通過@ControllerAdvice注解配置

 /** * @Author 劉翊揚 * @Date 2020/9/30 11:39 下午 * @Version 1.0 */ @ControllerAdvice(basePackages = "com.yiyang.myfirstspringdemo.controller") public class GlobalExceptionHandler { @ExceptionHandler(RuntimeException.class) @ResponseBody public Map errorResult()  { Map map = new HashMap<>(); map.put("errorCode", "500"); map.put("errorMsg", "全局捕獲異常"); return map; } }
  • @ExceptionHandler 表示攔截異常
  • @ControllerAdvice 是 controller 的一個輔助類,最常用的就是作為全局異常處理的切面類
  • @ControllerAdvice 可以指定掃描范圍

注意:下面還需要在啟動類上加上,否則誒呦效果

 package com.yiyang.myfirstspringdemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages = {"com.yiyang.myfirstspringdemo.error", "com.yiyang.myfirstspringdemo.controller"}) public class MyFirstSpringDemoApplication { public static void main(String[] args) { SpringApplication.run(MyFirstSpringDemoApplication.class, args); } }

在啟動類上,將掃描包范圍controller和全局異常處理類,加上去。

springBoot2.X配置全局捕獲異常的操作

這樣當我們在訪問的時候,出現的異常提示信息就是我們在全局異常處理中設置的返回值。

springboot2.x 全局異常處理的正確方式

在web項目中,異常堆棧信息是非常敏感的。因此,需要一個全局的異常處理,捕獲異常,給客戶端以友好的錯誤信息提示。基于 Spring boot 很容易實現全局異常處理。

相關jar依賴引入

  org.springframework.bootspring-boot-starter-parent2.1.6.RELEASE UTF-8UTF-81.8  org.springframework.bootspring-boot-starter-web

全局異常控制器

 package com.yb.demo.common.handler; import com.yb.demo.common.enums.CodeEnum; import com.yb.demo.common.exception.BizException; import com.yb.demo.pojo.response.Result; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.validation.BindException; import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.validation.ValidationException; import java.util.StringJoiner; /** * 全局異常處理 * 

* 規范:流程跳轉盡量避免使用拋 BizException 來做控制。 * * @author daoshenzzg@163.com * @date 2019-09-06 18:02 */ @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { /** * 處理自定義異常 * * @param ex * @return */ @ExceptionHandler(BizException.class) public Result handleBizException(BizException ex) { Result result = Result.renderErr(ex.getCode()); if (StringUtils.isNotBlank(ex.getRemark())) { result.withRemark(ex.getRemark()); } return result; } /** * 參數綁定錯誤 * * @param ex * @return */ @ExceptionHandler(BindException.class) public Result handleBindException(BindException ex) { StringJoiner sj = new StringJoiner(";"); ex.getBindingResult().getFieldErrors().forEach(x -> sj.add(x.getDefaultMessage())); return Result.renderErr(CodeEnum.REQUEST_ERR).withRemark(sj.toString()); } /** * 參數校驗錯誤 * * @param ex * @return */ @ExceptionHandler(ValidationException.class) public Result handleValidationException(ValidationException ex) { return Result.renderErr(CodeEnum.REQUEST_ERR).withRemark(ex.getCause().getMessage()); } /** * 字段校驗不通過異常 * * @param ex * @return */ @ExceptionHandler(MethodArgumentNotValidException.class) public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException ex) { StringJoiner sj = new StringJoiner(";"); ex.getBindingResult().getFieldErrors().forEach(x -> sj.add(x.getDefaultMessage())); return Result.renderErr(CodeEnum.REQUEST_ERR).withRemark(sj.toString()); } /** * Controller參數綁定錯誤 * * @param ex * @return */ @ExceptionHandler(MissingServletRequestParameterException.class) public Result handleMissingServletRequestParameterException(MissingServletRequestParameterException ex) { return Result.renderErr(CodeEnum.REQUEST_ERR).withRemark(ex.getMessage()); } /** * 處理方法不支持異常 * * @param ex * @return */ @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class) public Result handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException ex) { return Result.renderErr(CodeEnum.METHOD_NOT_ALLOWED); } /** * 其他未知異常 * * @param ex * @return */ @ExceptionHandler(value = Exception.class) public Result handleException(Exception ex) { log.error(ex.getMessage(), ex); return Result.renderErr(CodeEnum.SERVER_ERR); } }

個性化異常處理

自定義異常

在實際web開發過程中,往往會遇到在某些場景下需要終止當前流程,直接返回。那么,通過拋出自定義異常,并在全局異常中捕獲,用以友好的提示客戶端。

 /** * 業務異常跳轉。 * * @author daoshenzzg@163.com * @date 2019-09-09 14:57 */ @Data public class BizException extends RuntimeException { private static final long serialVersionUID = 1L; private CodeEnum code; private String remark; public BizException(CodeEnum code) { super(code.getMessage()); this.code = code; } public BizException withRemark(String remark) { this.remark = remark; return this; } }

使用方式如下:

 /** * 添加學生 * * @param student * @return */ public Student1DO addStudent(Student1DO student) { if (StringUtils.isNotBlank(student.getStudName())) { // 舉例扔個業務異常,實際使用過程中,應該避免扔異常 throw new BizException(CodeEnum.REQUEST_ERR).withRemark("studName不能為空"); } student1Mapper.insert(student); return student; }

返回效果如下:

{
"code": -400,
"msg": "請求錯誤(studName不能為空)",
"data": {},
"ttl": 0
}

根據阿里巴巴規范,流程控制還是不要通過拋異常的方式。在正常開發過程中,應避免使用這種方式。

【強制】異常不要用來做流程控制,條件控制,因為異常的處理效率比條件分支低。

使用 Spring validation 完成數據后端校驗

定義實體類,加上validation相關注解

 package com.yb.demo.pojo.model.db1; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import javax.validation.constraints.Min; import javax.validation.constraints.Size; /** * @author daoshenzzg@163.com * @date 2019-08-05 17:58 */ @Data @TableName("student") public class Student1DO { private Long id; @Size(max = 8, message = "studName長度不能超過8") private String studName; @Min(value = 12, message = "年齡不能低于12歲") private Integer studAge; private String studSex; @TableField(fill = FieldFill.INSERT) private Integer createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateTime; }

在Controller 方法上加上 @Validated 注解

 @PostMapping("/student/add") public Result addStudent(@Validated @RequestBody Student1DO student) { student = studentService.addStudent(student); return Result.renderOk(student); }

實際效果如下:

{
"code": -400,
"msg": "請求錯誤(年齡不能低于12歲)",
"data": {},
"ttl": 0
}

結束語

具體代碼見:https://github.com/daoshenzzg/springboot2.x-example

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/liufei2/p/13765947.html

延伸 · 閱讀

精彩推薦
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 国产精品自产拍在线观看桃花 | 亚洲成av人片在线观看 | 日韩有码av| 亚洲精品午夜 | 久久综合导航 | 欧美一二三 | 欧美一区二区三区在线观看 | 天堂v视频永久在线播放 | 国产日韩精品视频 | 日本在线免费观看视频 | 亚洲综合一区二区 | 91国内在线观看 | 欧美在线观看一区二区 | 中文字幕在线观看视频地址二 | 一区二区免费在线播放 | 色综合久久久 | 国产小视频在线播放 | 一级免费毛片 | 99爱视频 | 久久久久久久久久久影视 | 日本网站在线免费观看 | 在线欧美一区 | 国产在线在线 | 亚洲视频免费观看 | 欧美一级在线观看 | 一本色道精品久久一区二区三区 | 91社区福利 | 亚洲成人久久久 | 日韩中文字幕一区二区 | 欧美在线99 | 精品久久久一 | 天堂资源在线 | 可以免费看黄的网站 | 91中文在线 | 亚洲综合自拍 | 日韩亚洲一区二区 | 国产精品爱久久久久久久 | 欧美精品一区二区三区在线播放 | 久久久久久国产精品mv | 午夜成人免费视频 | 视频一区二区三区中文字幕 |