Spring 3.2提供了强大的新注解   @ControllerAdvice,主要是用来Controller的一些公共的需求的低侵入性增强提供辅助,作用于@RequestMapping标注的方法上。

和此注解配合使用的其他注解有:

  1. @ExceptionHandler   自定义的错误处理器
  2. @ModelAttribute      全局的对所有的controller的Model添加属性
  3. @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字段验证的完美结合的更多相关文章

  1. 我心中的核心组件(可插拔的AOP)~第四回 异常拦截器

    回到目录 之前说过有关拦截器的文章,第二回  缓存拦截器,事实上,在那讲里说的最多是AOP和缓存组件,对于拦截的概念并没有详细的说明,这一讲,不说AOP,主要说一下拦截器,拦截器Interceptio ...

  2. SpringMVC(四)SpringMVC实现文件上传、异常拦截去、整合SSM

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.文件上传 文件上传在SpringMVC中如何实现: 准备一个文件上传的表单 导入文件上传需要的jar ...

  3. 通过配置http拦截器,来进行ajax请求验证用户登录的页面跳转

    在.NET中验证用户是否登录或者是否过期,若需要登录时则将请求转向至登录页面. 这个流程在进行页面请求时是没问题的,能正确进行页面跳转. 然而在使用xmlhttprequest时,或者jq的getJs ...

  4. SpringMVC 实现文件上传与下载,并配置异常页面

    目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...

  5. Java自定义异常类以及异常拦截器

    自定义异常类不难,但下面这个方法,它的核心是异常拦截器类. 就算是在分布式系统间进行传递也可以,只要最顶层的服务有这个异常拦截器类(下例是在 springboot 项目中) 1.自定义异常类,继承自 ...

  6. vue_axios请求封装、异常拦截统一处理

    1.前端网络请求封装.异常统一处理 vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成的异常情况的判断,采用axios请求封装和异常拦截操作: axios 请求封装 // ...

  7. Spring-全局异常拦截

    Spring MVC那一篇里提到了异常拦截来做参数校验返回,那里是对特定的 controller 做异常捕捉,但是我们也可以选择全局拦截处理 快速开始 @ResponseBody @Controlle ...

  8. spring boot配置springMVC拦截器

    spring boot通过配置springMVC拦截器 配置拦截器比较简单, spring boot配置拦截器, 重写preHandle方法. 1.配置拦截器: 2重写方法 这样就实现了拦截器. 其中 ...

  9. springboot全局异常拦截源码解读

    在springboot中我们可以通过注解@ControllerAdvice来声明一个异常拦截类,通过@ExceptionHandler获取拦截类抛出来的具体异常类,我们可以通过阅读源码并debug去解 ...

随机推荐

  1. java多态instanceof介绍

    1 public static void method(Animal a) {//类型判断 2 a.eat(); 3 if(a instanceof Cat) {//instanceof:用于判断对象 ...

  2. Linux下安装confluence汉化破解版

    Atlassian Confluence(简称Confluence)是一个专业的wiki程序.它是一个知识管理的工具,通过它可以实现团队成员之间的协作和知识共享.Confluence 不是一个开源软件 ...

  3. Oracle AWR报告采样分析

    DB time可以用来判断数据库整体是否繁忙,如果Elapsed*CPU个数小于DB time,代表数据库整体比较繁忙,CPU负载会比较高. Report Summary分为8个部分,最主要的是loa ...

  4. expect.sh

    #!/usr/bin/expect spawn /usr/bin/ssh root@192.168.43.43 -p 22 expect "password:" send &quo ...

  5. 人口信息普查系统-JavaWeb-四

    今天给大家分享前端人口登记页面,人口查询页面 人口登记 <%@ page language="java" contentType="text/html; chars ...

  6. 使用 TensorFlow 构建机器学习项目中文版&#183;翻译完成

    原文:Building Machine Learning Projects with TensorFlow 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原 ...

  7. ByteArrayOutputStream内存流

    简介 ByteArrayOutputStream 对byte类型数据进行写入的类 相当于一个中间缓冲层,创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区 ...

  8. Request与Response

    前言 request和response对象是由服务器创建的.我们来使用它们: request对象是来获取请求消息,response对象是来设置响应消息. Request 定义 服务器进行创建,通过该对 ...

  9. java基础之抽象类的介绍

    抽象类的特点: 1.当方法只有声明没有具体实现的时候,需要用abstract修饰符修饰.抽象方法必须定义在抽象类当中,所以抽象类也需要用abstract修饰 2.抽象类不可以被实例化,为什么呢?   ...

  10. 推荐的php安全配置选项

    推荐安全配置选项 这里有几个会影响安全功能的 PHP 配置设置.下面是一些显然应该用于生产服务器的: register_globals 设置为 offsafe_mode 设置为 offerror_re ...