SpringBoot中如何实现全局异常与数据校验(springboot,编程语言)

时间:2024-05-06 04:53:49 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

项目建立

利用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模拟请求接口,进行验证

SpringBoot中如何实现全局异常与数据校验

数据绑定异常处理

通常我们操作数据的时候,不仅前端需要进行数据校验,后端也应当进行拦截和进行相应的错误提示,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模拟请求

不填写任何属性,模拟添加操作,准确进行拦截和报错

SpringBoot中如何实现全局异常与数据校验

项目结构预览:

SpringBoot中如何实现全局异常与数据校验

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:SpringBoot中如何实现全局异常与数据校验的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Python中怎么实现数据分析功能下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18