配置异常拦截处理以及与javabean字段验证的完美结合
Spring 3.2提供了强大的新注解 @ControllerAdvice,主要是用来Controller的一些公共的需求的低侵入性增强提供辅助,作用于@RequestMapping标注的方法上。
和此注解配合使用的其他注解有:
- @ExceptionHandler 自定义的错误处理器
- @ModelAttribute 全局的对所有的controller的Model添加属性
- @InitBinder 对表单数据绑定
1 .这次我们要用到他的一个特性就是 @ExceptionHandler ,可以作用于所有@RequestMapping方法上。
我们举个例子实现 用注解去验证前端传过来的javabean而不是自己去if判断,并且将验证异常返回的内容修改为我们的自己的json格式。
① 首先定义一个ControllerAdvice,必须将这个Advice会被Spring扫描到。
@ControllerAdvice
public class ValidateAdvice { @ResponseBody
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Result myErrorHandler(MethodArgumentNotValidException ex) { return ResultUtil.error(ResultEnum.PARAM_ERROR.getCode(),ex.getBindingResult().getFieldError().getDefaultMessage());
}
}
其中 MethodArgumentNotValidException 异常就是 @NotBlank 标注的字段触发后抛出的异常类型。
②其中要验证的JavaBean为
/**
* 经办人批转DTO
*/
@Data
public class TransforTaskDTO implements Serializable{
private static final long serialVersionUID = 3411962685906772077L; // 不动产记录id
private String id; // 变更的经办人id
@NotBlank(message = "用户id不能为空")
private String userId; }
我们验证 userId字段。
③我们的Controller为
@PostMapping("/transferTaskForRegister")
public Result transferTask(@Valid @RequestBody TransforTaskDTO transforTaskDTO){ tRegisterProcessService.transforTask(transforTaskDTO);
return ResultUtil.success(); }
然后最重要的是 在 验证的bean前端一定要加@Valid 才会生效。
当前端传过来参数的时候,如果userId为空,那么会抛出 MethodArgumentNotValidException,然后会在我们的ControllerAdvice中拦截这个异常,并由我们处理,将他返回指定格式的Json.
配置异常拦截处理以及与javabean字段验证的完美结合的更多相关文章
- 我心中的核心组件(可插拔的AOP)~第四回 异常拦截器
回到目录 之前说过有关拦截器的文章,第二回 缓存拦截器,事实上,在那讲里说的最多是AOP和缓存组件,对于拦截的概念并没有详细的说明,这一讲,不说AOP,主要说一下拦截器,拦截器Interceptio ...
- SpringMVC(四)SpringMVC实现文件上传、异常拦截去、整合SSM
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.文件上传 文件上传在SpringMVC中如何实现: 准备一个文件上传的表单 导入文件上传需要的jar ...
- 通过配置http拦截器,来进行ajax请求验证用户登录的页面跳转
在.NET中验证用户是否登录或者是否过期,若需要登录时则将请求转向至登录页面. 这个流程在进行页面请求时是没问题的,能正确进行页面跳转. 然而在使用xmlhttprequest时,或者jq的getJs ...
- SpringMVC 实现文件上传与下载,并配置异常页面
目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...
- Java自定义异常类以及异常拦截器
自定义异常类不难,但下面这个方法,它的核心是异常拦截器类. 就算是在分布式系统间进行传递也可以,只要最顶层的服务有这个异常拦截器类(下例是在 springboot 项目中) 1.自定义异常类,继承自 ...
- vue_axios请求封装、异常拦截统一处理
1.前端网络请求封装.异常统一处理 vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成的异常情况的判断,采用axios请求封装和异常拦截操作: axios 请求封装 // ...
- Spring-全局异常拦截
Spring MVC那一篇里提到了异常拦截来做参数校验返回,那里是对特定的 controller 做异常捕捉,但是我们也可以选择全局拦截处理 快速开始 @ResponseBody @Controlle ...
- spring boot配置springMVC拦截器
spring boot通过配置springMVC拦截器 配置拦截器比较简单, spring boot配置拦截器, 重写preHandle方法. 1.配置拦截器: 2重写方法 这样就实现了拦截器. 其中 ...
- springboot全局异常拦截源码解读
在springboot中我们可以通过注解@ControllerAdvice来声明一个异常拦截类,通过@ExceptionHandler获取拦截类抛出来的具体异常类,我们可以通过阅读源码并debug去解 ...
随机推荐
- 集合框架-工具类-Collections-其他方法将非同步集合转成同步集合的方法
集合框架TXT Collections-其他方法将非同步集合转成同步集合的方法
- ajax返回获取的值在其他地方获取
继续上个问题的后续问题,因为要获取token进行身份验证,但是又不想写死token值,通过以下方式解决: 1.定义一个分离出来的方法. 2.定义一个全局变量.局部变量. 3.把ajax改成同步的.as ...
- migrate 和makemigrations 命令
在你改动了app下 models.py的内容之后执行下面的命令: Python manger.py makemigrations 相当于 在该app下建立 migrations目录,并记录下你所有的关 ...
- Oracle AWR报告采样分析
DB time可以用来判断数据库整体是否繁忙,如果Elapsed*CPU个数小于DB time,代表数据库整体比较繁忙,CPU负载会比较高. Report Summary分为8个部分,最主要的是loa ...
- Let's Encrypt 证书 wget 报错
最近发现一个奇怪的问题,网站使用 let's encrypt 的免费证书,浏览器访问时正常,但是wget的时候报错.报错信息如下: wget https://www.example.com --202 ...
- ERNIE代码解析
原创作者 |疯狂的Max ERNIE代码解读 考虑到ERNIE使用BRET作为基础模型,为了让没有基础的NLPer也能够理解代码,笔者将先为大家简略的解读BERT模型的结构,完整代码可以参见[1]. ...
- springboot 分布式项目,子级项目各自的作用。
一.分布式项目,需要使用maven搭建. 1.1 父级pro.xml module. <?xml version="1.0" encoding="UTF-8&quo ...
- Pycharm 实现保存时修正格式(format_on_save)
前言 VSCODE是近年来备受欢迎的轻量级代码编辑器,有一项非常实用功能--保存时修正代码格式(formatonsave) Pycharm作为一款IDE,虽然本身不具备此功能,但通过几个并不复杂的设置 ...
- Android 高德地图使用小记
感谢大佬:https://www.cnblogs.com/devilmaycry812839668/p/8727569.html 高德地图 Android编程中 如何设置使 标记 marker 能够被 ...
- Typora快捷键 shortcuts-windows
Typora快捷键 shortcuts-windows 快捷键 作用 ctrl+ ctrl- 字体大小调节 ctrl + shift + ` 行内代码 alt+shift+5 删除线 ctrl+shi ...