SpringBoot中如何实现全局异常与数据校验
导读:本文共2472字符,通常情况下阅读需要8分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 项目建立利用idea 工具,很容易的搭建一个SpringBoot项目,要引入的maven依赖如下:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifac... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。项目建立
利用idea 工具,很容易的搭建一个SpringBoot项目,要引入的maven依赖如下:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
很简单,除了加入web功能还加入了我们需要用到的JSR-303校验框架。
定义成功失败 返回码
publicclassCode{/***成功*/publicstaticintSUCCESSED=1;/***失败*/publicstaticintFAILED=-1;}
定义接口返回响应实体
publicclassResponse<T>implementsSerializable{/****/privatestaticfinallongserialVersionUID=4250719891313555820L;/***返回结果集*/privateTresult;/***返回消息*/privateStringmsg;/***响应码*/privateIntegercode;//setget略}
全局异常拦截和验证
定义自定义业务异常
publicclassMyExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=-5875371379845226068L;publicMyException(){}publicMyException(Stringmsg){this.msg=msg;}/***异常信息*/privateStringmsg;/***具体异常码*/privateintcode=Code.FAILED;getset略
编写全局异常控制器并对自定义异常做处理
@ControllerAdvicepublicclassGlobalExceptionHandler{privateLoggerlogger=LoggerFactory.getLogger(GlobalExceptionHandler.class);@ExceptionHandler(value=MyException.class)@ResponseBodypublicResponse<String>myExceptionErrorHandler(MyExceptionex)throwsException{logger.error("myExceptionErrorHandlerinfo:{}",ex.getMessage());Response<String>r=newResponse<>();r.setMsg(ex.getMsg());r.setCode(ex.getCode());returnr;}
编写controller模拟抛出业务异常
@RestController@RequestMapping("/user")publicclassUserController{@PostMapping(value="/update")Response<Boolean>update(Useruser){//todo此处为模拟异常抛出if(true){thrownewMyException("更新失败");}//todo此处为模拟返回Response<Boolean>response=newResponse<>();response.setCode(Code.SUCCESSED);response.setResult(true);returnresponse;}}
postMan模拟请求接口,进行验证
数据绑定异常处理
通常我们操作数据的时候,不仅前端需要进行数据校验,后端也应当进行拦截和进行相应的错误提示,JSR-303校验框架也是我们的一种选择。
编写实体`User`,并对属性进行注解控制
publicclassUser{@NotNull(message="用户名不能为空")privateStringuserName;privateintage;//...
全局异常控制类加入拦截
@ControllerAdvicepublicclassGlobalExceptionHandler{privateLoggerlogger=LoggerFactory.getLogger(GlobalExceptionHandler.class);@ExceptionHandler(value=BindException.class)@ResponseBodypublicResponse<String>bindExceptionErrorHandler(BindExceptionex)throwsException{logger.error("bindExceptionErrorHandlerinfo:{}",ex.getMessage());Response<String>r=newResponse<>();StringBuildersb=newStringBuilder();FieldErrorfieldError=ex.getFieldError();sb.append(fieldError.getDefaultMessage());r.setMsg(sb.toString());r.setCode(Code.FAILED);returnr;}//...
编写控制器
@RestController@RequestMapping("/user")publicclassUserController{@PostMapping(value="/add")Response<User>add(@ValidatedUseruser){//todo此处为模拟返回Response<User>response=newResponse<>();response.setCode(Code.SUCCESSED);response.setResult(newUser());returnresponse;}//...
postMan模拟请求
不填写任何属性,模拟添加操作,准确进行拦截和报错
项目结构预览:
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:
SpringBoot中如何实现全局异常与数据校验的详细内容,希望对您有所帮助,信息来源于网络。