全局异常捕获(支出@Valid)
时间:2021-08-20
本文章向大家介绍全局异常捕获(支出@Valid),主要包括全局异常捕获(支出@Valid)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
package com.test3.handler; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver; import org.springframework.validation.BindException; import org.springframework.web.bind.MethodArgumentNotValidException; import com.test3.utils.JsonResult; import com.test3.utils.MsgEnum; import com.test3.utils.MyException; /** * 异常捕获rest处理 */ @ControllerAdvice public class ExceptionHandler extends ExceptionHandlerExceptionResolver{ private static final Logger logger = LoggerFactory.getLogger(ExceptionHandler.class); public static final String DEFAULT_ERROR_VIEW = "error"; @SuppressWarnings("unchecked") @org.springframework.web.bind.annotation.ExceptionHandler(value = Exception.class) @ResponseBody public JsonResult<Object> handle(Exception e) { e.printStackTrace(); if (e instanceof MyException) { MyException mye = (MyException) e; return JsonResult.errorResult(mye.getCode(), mye.getMessage()); } else if(e instanceof BindException) { // 非@RequestBody参数 BindException ex = (BindException)e; String msg = ex.getBindingResult().getAllErrors().stream() .filter(FieldError.class::isInstance) .map(FieldError.class::cast) .map(FieldError::getDefaultMessage) .collect(Collectors.joining()); return JsonResult.errorResult(5, msg); } else if (e instanceof MethodArgumentNotValidException) { //@RequestBody 参数 MethodArgumentNotValidException ex = (MethodArgumentNotValidException)e; String msg = ex.getBindingResult().getAllErrors().stream() .filter(FieldError.class::isInstance) .map(FieldError.class::cast) .map(FieldError::getDefaultMessage) .collect(Collectors.joining()); return JsonResult.errorResult(6, msg); }else { logger.error("未知异常:", e); if (e.getMessage() != null && e.getMessage().startsWith("Failed to convert value of type")) { return JsonResult.errorResult(MsgEnum.PARAMTYPE_ERROR); } else { return JsonResult.errorResult(MsgEnum.UNKNOW_ERROR); } } } //这里是异常页面跳转,一般不使用, 注意需要加@org.springframework.web.bind.annotation.ExceptionHandler(value = Exception.class) 才能用 public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception { ModelAndView mav = new ModelAndView(); mav.addObject("exception", e); mav.addObject("url", req.getRequestURL()); mav.setViewName(DEFAULT_ERROR_VIEW); return mav; } }
1.加上@Valid
public JsonResult mytestnormal(@RequestBody @Valid TestRequest tq)
2.TestRequest.java中加上验证注解
@NotBlank(message="标题不能为空!")
private String title;
无聊我就学英语
原文地址:https://www.cnblogs.com/trump2/p/15166793.html
- Mysql双主热备+LVS+Keepalived高可用操作记录
- 被曝大裁员!曲德君坚称万达网科没有倒下、目标决心不变
- Linux下smokeping网络监控环境部署记录
- Linux下的rsyslog系统日志梳理(用户操作记录审计)
- 数据结构之数组封装
- Centos下内网NDS主从环境部署记录
- 一搜解决,微信的这个功能厉害了!
- Saltstack自动化操作记录(2)-配置使用
- Saltstack自动化操作记录(1)-环境部署
- CentOS源码编译安装Nginx和tcp_proxy module
- 介绍一个MonoTouch开发的伦敦官方城市指南应用
- 虾说区块链-55-《精通比特币》笔记十
- SignalR QuickStart
- Node.js入门学习笔记-IDE选择/配置之WebStorm(windows)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 专为程序员定制的垃圾清理工具(Node Cli实现)
- CodePen vue SFC 、flutter 在线玩耍来袭
- [重拾CSS]一道面试题来看伪元素、包含块和高度坍塌
- webpack 拍了拍你,给了你一份图解指南(模块化部分)
- 深入探究Immutable.js的实现机制(一)
- 深入探究immutable.js的实现机制(二)
- ES6 Promise 的最佳实践
- 「 Map最佳实践」什么时候适合使用 Map 而不是 Object
- ES2017 异步函数的最佳实践(`async` /`await`)
- React Hooks中这样写HTTP请求可以避免内存泄漏
- 用了这 7 个 VS Code 插件,想写一辈子代码
- 听说你还不知道Promise的allSettled()和all()的区别?
- React 条件渲染最佳实践(7 种方法)
- 一文带你层层解锁「文件下载」的奥秘
- Android实现简单C/S聊天室应用