热卖商品
新闻详情
Spring Boot实战之全局异常捕获 实现参数异常检查返回..._CSDN博客
来自 : CSDN技术社区
发布时间:2021-03-25
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; } }
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、当参数合法
当参数非法 返回与参数合法时有相同风格的错误信息
本文链接: http://benaglobal.immuno-online.com/view-770219.html
发布于 : 2021-03-25
阅读(0)
最新动态
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
2021-03-24
联络我们