Bean Validation设置校验失败全局返回信息(续自定义JSR validation)
来源:互联网 发布:域名的拼音 编辑:程序博客网 时间:2024/05/16 07:59
demo网址在上一篇有,这篇写如何定义validation验证失败后的返回信息。
(截图源于上篇)
由下图看出验证失败后Swagger会抛出一堆错误信息,但其实前端要的只是错误的字段信息,即一般我们只需返回错误字段的信息,下面为上红框异常类的源码:
public class MethodArgumentNotValidException extends Exception { private final MethodParameter parameter; private final BindingResult bindingResult; public MethodArgumentNotValidException(MethodParameter parameter, BindingResult bindingResult) { this.parameter = parameter; this.bindingResult = bindingResult; } public MethodParameter getParameter() { return this.parameter; } public BindingResult getBindingResult() { return this.bindingResult; } public String getMessage() { StringBuilder sb = (new StringBuilder("Validation failed for argument at index ")).append(this.parameter.getParameterIndex()).append(" in method: ").append(this.parameter.getMethod().toGenericString()).append(", with ").append(this.bindingResult.getErrorCount()).append(" error(s): "); Iterator var2 = this.bindingResult.getAllErrors().iterator(); while(var2.hasNext()) { ObjectError error = (ObjectError)var2.next(); sb.append("[").append(error).append("] "); } return sb.toString(); }}从源码可以看出验证失败Swagger输出的信息都是该异常类组装的字符串,若要自定义返回信息,那我们只需从这个异常类获取相应的信息根据需要组装返回即可。由于验证失败会抛出异常,所以我们可以通过设置全局异常同一处理,具体处理类如下:
个人自定义返回码:@ControllerAdvice@ResponseBody//必须添加,否则Spring会将返回值当作视图解析抛出异常public class ParamExceptionHandler { @Autowired private HttpServletRequest request; @ExceptionHandler(value = MethodArgumentNotValidException.class) public Object MethodArgumentNotValidHandler(MethodArgumentNotValidException exception){ //按需重新封装需要返回的错误信息 List<ParamValidationResult> paramValidationResults = new ArrayList<>(); //解析原错误信息,封装后返回,此处返回非法的字段名称,错误信息 for (FieldError error : exception.getBindingResult().getFieldErrors()) { ParamValidationResult validationResult = new ParamValidationResult(); validationResult.setMessage(error.getDefaultMessage()); validationResult.setParam(error.getField()); paramValidationResults.add(validationResult); } return new ResultMsg(ResultCode.CODE_401, paramValidationResults); }}
public enum ResultCode { CODE_200(200, "访问成功"), CODE_401(401, "非法请求,参数错误"), CODE_402(402, "未授权,accessToken过期或无效"), CODE_403(403, "Method使用错误,请查看API"), CODE_404(404, "找不到访问地址"), CODE_406(406, "没有权限访问"), CODE_500(500, "系统内部错误"), CODE_501(501, "对象已存在,请检测唯一性"), CODE_502(502, "当前版本与服务器版本不一致,请更新应用"), CODE_503(503, "对象不存在,请检测请求参数"), CODE_504(504, "服务器连接错误,请稍后重试"), CODE_505(505, "key校验失败"), CODE_506(506, "RPC服务连接失败,请稍后重试"); public Integer code; public String msg; ResultCode(Integer code, String msg) { this.msg = msg; this.code = code; }}返回信息类:
public class ResultMsg { private Integer code; private String msg; private Object data; public ResultMsg() { } public ResultMsg(ResultCode resultCode) { this.code = resultCode.code; this.msg = resultCode.msg; } public ResultMsg(ResultCode resultCode,Object data) { this.code = resultCode.code; this.msg = resultCode.msg; this.data = data; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}
再次运行测试Swagger已能输出理想的错误信息
阅读全文
0 0
- Bean Validation设置校验失败全局返回信息(续自定义JSR validation)
- JSR 303 - Bean Validation
- JSR 303 - Bean Validation
- JSR-303规范,Bean Validation(spring mvc中如何校验)
- JSR-303规范,Bean Validation(spring mvc中如何校验)
- JSR-303规范,Bean Validation(spring mvc中如何校验)
- JSR-303规范,Bean Validation
- JSR-303规范,Bean Validation
- JSR 303 - Bean Validation备忘
- JSR 303 - Bean Validation 介绍
- JSR-303规范,Bean Validation
- JSR 303 - Bean Validation数据验证
- Bean Validation 1.1(JSR-349)到SpringMVC
- JSR 303 - Bean Validation 简介及使用方法
- JSR 303 – Bean Validation 规范
- Jquery-Validation自定义校验方法
- Hibernate validation 的使用. Bean 自动校验
- Hibernate validation 的使用. Bean 自动校验
- 2723: 默认参数--求圆的面积
- Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景 & AtomicReference
- java面试宝典
- S3C6410开发(2)-构建开发环境
- 设计模式之简单工厂模式
- Bean Validation设置校验失败全局返回信息(续自定义JSR validation)
- PC端浏览器调用QQ
- mybatis中模糊查询的写法
- MyEclipse2017:开启codeView导致html被注入一些js代码引起的问题
- adb install 多设备
- 【重磅推荐】34张史上最全IT架构师技术知识图谱
- 关于java中the jar file C:\program files\java\jar7\lib\rt.jar has no ...
- 收获,不止SQL优化——抓住SQL的本质--第十章
- 程序,进程,线程(任务)