Spring Boot实战之全局异常捕获 实现参数异常检查返回统一错误信息
来源:互联网 发布:51电子单片机原理图 编辑:程序博客网 时间:2024/05/17 08:49
Spring Boot实战之全局异常处理实现参数非法性检查
在一个项目中的异常我们我们都会统一进行处理的,本文实现对接口中传入的参数进行非法性检查,当参数非法时,抛出异常,然后返回统一的错误信息。
1、添加测试Bean,测试类中定义几个字段,并且每个字段都做一定的限制
package com.xiaofangtech.sunt.bean;import javax.validation.constraints.AssertFalse;import javax.validation.constraints.Size;import org.hibernate.validator.constraints.Range;public class BeanValidation {@Size(min=6,max=10)private String field1;@Range(min=0,max=1)private Long field2;@AssertFalseprivate Boolean field3;public String getField1() {return field1;}public void setField1(String field1) {this.field1 = field1;}public Long getField2() {return field2;}public void setField2(Long field2) {this.field2 = field2;}public Boolean getField3() {return field3;}public void setField3(Boolean field3) {this.field3 = field3;}}
@RequestMapping("globalexceptiontest")public Object globalExceptionTest(@Validated @RequestBody BeanValidation data){ResultMsg resultMsg = new ResultMsg(ResultStatusCode.OK.getErrcode(), ResultStatusCode.OK.getErrmsg(), data);return resultMsg;}
3、如果未添加全局异常处理,将会使用默认的异常处理,返回结果,如下图
返回的结果和自己的数据结构有很大的差异,对于前端处理返回结果也很麻烦
4、自定义参数异常返回的数据类ArgumentInvalidResult
package com.xiaofangtech.sunt.utils;public class ArgumentInvalidResult {private String field;private Object rejectedValue;private String defaultMessage;public String getField() {return field;}public void setField(String field) {this.field = field;}public Object getRejectedValue() {return rejectedValue;}public void setRejectedValue(Object rejectedValue) {this.rejectedValue = rejectedValue;}public String getDefaultMessage() {return defaultMessage;}public void setDefaultMessage(String defaultMessage) {this.defaultMessage = defaultMessage;}}
5、添加全局异常处理类GlobalExceptionHandler
package com.xiaofangtech.sunt.exception;import java.util.ArrayList;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.springframework.validation.FieldError;import org.springframework.web.bind.MethodArgumentNotValidException;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;import com.xiaofangtech.sunt.utils.ArgumentInvalidResult;import com.xiaofangtech.sunt.utils.ResultMsg;import com.xiaofangtech.sunt.utils.ResultStatusCode;@ControllerAdvice//如果返回的为json数据或其它对象,添加该注解@ResponseBodypublic class GlobalExceptionHandler {//添加全局异常处理流程,根据需要设置需要处理的异常,本文以MethodArgumentNotValidException为例@ExceptionHandler(value=MethodArgumentNotValidException.class)public Object MethodArgumentNotValidHandler(HttpServletRequest request,MethodArgumentNotValidException exception) throws Exception{//按需重新封装需要返回的错误信息List<ArgumentInvalidResult> invalidArguments = new ArrayList<>();//解析原错误信息,封装后返回,此处返回非法的字段名称,原始值,错误信息for (FieldError error : exception.getBindingResult().getFieldErrors()) {ArgumentInvalidResult invalidArgument = new ArgumentInvalidResult();invalidArgument.setDefaultMessage(error.getDefaultMessage());invalidArgument.setField(error.getField());invalidArgument.setRejectedValue(error.getRejectedValue());invalidArguments.add(invalidArgument);}ResultMsg resultMsg = new ResultMsg(ResultStatusCode.PARAMETER_ERROR.getErrcode(), ResultStatusCode.PARAMETER_ERROR.getErrmsg(), invalidArguments);return resultMsg;}}
6、运行测试
1、当参数合法
当参数非法,返回与参数合法时有相同风格的错误信息
3 0
- Spring Boot实战之全局异常捕获 实现参数异常检查返回统一错误信息
- spring boot 全局异常捕获
- Spring MVC使用之统一异常捕获
- Spring-MVC开发之全局异常捕获
- spring boot之统一错误异常处理
- spring boot 全局异常
- 企业实战之spring增强器实现《全局异常处理器》
- iOS 捕获全局异常,统一收集
- spring 全局统一处理异常
- Spring Mvc全局异常捕获
- spring mvc 全局异常捕获
- Spring-Boot 统一异常处理
- Spring Boot 异常统一处理
- Spring boot统一异常处理
- springboot之全局异常捕获
- Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
- spring boot全局异常捕捉
- spring boot 全局异常捕捉
- 那些程序员们后知后觉的职涯经验
- getActionBar().setDisplayHomeAsUpEnabled(true)报错空指针异常
- ASP.Net程序插入错误: 列名或所提供值的数目与表定义不匹配
- Quated-Printable解码及出错解决方式
- opencv清晰度,色偏等评价函数
- Spring Boot实战之全局异常捕获 实现参数异常检查返回统一错误信息
- 简单题:Your task is to Calculate a + b.
- LeetCode 2. Add Two Numbers
- Animation-Layer
- const 常量指针
- MySQL中的数据类型
- 一文看尽中国互动直播行业——低俗无聊?那是现状,不是未来
- Eclipse开发C/C++之使用技巧小结,写给新手
- 推荐算法预览