4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
Spring Boot实战之全局异常捕获 实现参数异常检查返回..._CSDN博客
来自 : CSDN技术社区 发布时间:2021-03-24

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; AssertFalse private 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; } }


2、添加测试接口 接口中使用 Validated注解对参数进行合法性检查 如果参数合法 返回原始数据

 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、当参数合法

\"\"

\"\"



当参数非法 返回与参数合法时有相同风格的错误信息

\"\"\"\"

\"\" \"\" \"\" 点赞 6 \"\" \"\" 评论 8

本文链接: http://benaglobal.immuno-online.com/view-711792.html

发布于 : 2021-03-24 阅读(0)