SpringMvc @Valid如何抛出拦截异常

 更新时间:2020年09月17日 10:06:47   作者:贾树丙  
这篇文章主要介绍了SpringMvc @Valid如何抛出拦截异常,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

SpringMvc中,校验参数可以使用 @Valid 注解,同时在相应的对象里使用

@NotBlank( message = "昵称不能为空")
@NotNull( message = "ID不能为空")
@Pattern(
  message = "不能包括空格"
  , regexp = "\\S+"
)

等等。

这个校验会把所有的参数都校验一遍,所以它的异常里会好些列表,直接使用e.getMessage(),会输出很多累赘的东西

一个好的解决办法

@Valid 注解校验住的异常是 org.springframework.validation.BindException

所以可以添加一个异常拦截器,专门拦截,并且解析这种异常

具体如下:

package cn.jiashubing.config;

import cn.jiashubing.result.ResultModel;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

/**
 * @author jiashubing
 * @since 2019/6/17
 */
@ControllerAdvice
public class BingExceptionHandler {

  @ExceptionHandler(BindException.class)
  @ResponseBody
  public ResultModel handleBindException(Exception e) {
    //打印校验住的所有的错误信息
    StringBuilder sb = new StringBuilder("参数错误:[");
    List<ObjectError> list = ((BindException) e).getAllErrors();
    for (ObjectError item : list) {
      sb.append(item.getDefaultMessage()).append(',');
    }
    sb.deleteCharAt(sb.length() - 1);
    sb.append(']');

    String msg = sb.toString();
    return new ResultModel(false, msg);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 浅析Java编程中枚举类型的定义与使用

    浅析Java编程中枚举类型的定义与使用

    这篇文章主要介绍了Java编程中枚举类型的定义与使用,简单讲解了enum关键字与枚举类的用法,需要的朋友可以参考下
    2016-05-05
  • java编译时指定classpath的实现方法

    java编译时指定classpath的实现方法

    在Java编程中,classpath是用于指定Java虚拟机在运行时查找类文件的路径,本文主要介绍了java编译时指定classpath的实现方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 浅析对Java关键字final和static的理解

    浅析对Java关键字final和static的理解

    本文主要给大家谈谈小编对java关键字final和static的理解,本文给大家介绍的较详细,需要的朋友参考参考下
    2017-04-04
  • SpringBoot集成Spring Data JPA及读写分离

    SpringBoot集成Spring Data JPA及读写分离

    这篇文章主要介绍了SpringBoot集成Spring Data JPA及读写分离的相关知识,需要的朋友可以参考下
    2017-04-04
  • Java:泛型知识知多少

    Java:泛型知识知多少

    这篇文章主要介绍了java泛型基础知识及通用方法,从以下几个方面介绍一下java的泛型: 基础, 泛型关键字, 泛型方法, 泛型类和接口,感兴趣的可以了解一下
    2021-08-08
  • Spring Boot 多个定时器冲突问题的解决方法

    Spring Boot 多个定时器冲突问题的解决方法

    这篇文章主要介绍了Spring Boot 多个定时器冲突问题的解决方法,实际开发中定时器需要解决多个定时器同时并发的问题,也要解决定时器之间的冲突问题,本文通过问题场景重现给大家介绍的非常详细,需要的朋友参考下吧
    2022-05-05
  • SpringBoot中的@Import注解四种使用方式详解

    SpringBoot中的@Import注解四种使用方式详解

    这篇文章主要介绍了SpringBoot中的@Import注解四种使用方式详解,@Import注解只可以标注在类上,可以结合 @Configuration注解、ImportSelector、ImportBeanDefinitionRegistrar一起使用,也可以导入普通的类,需要的朋友可以参考下
    2023-12-12
  • Java面向对象基础教学(一)

    Java面向对象基础教学(一)

    这篇文章主要介绍了Java的面相对象编程思想,包括类对象方法和封装继承多态等各个方面的OOP基本要素,非常推荐,需要的朋友可以参考下,希望可以对你有所帮助
    2021-07-07
  • Java+Selenium设置元素等待的方法详解

    Java+Selenium设置元素等待的方法详解

    本文主要介绍如何使用java代码利用Selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要设置元素等待,等待元素加载完,再操作,感兴趣的可以了解一下
    2023-01-01
  • SpringBoot中@ComponentScan注解过滤排除不加载某个类的3种方法

    SpringBoot中@ComponentScan注解过滤排除不加载某个类的3种方法

    这篇文章主要给大家介绍了关于SpringBoot中@ComponentScan注解过滤排除不加载某个类的3种方法,文中通过实例代码介绍的非常详细,对大家学习或者使用SpringBoot具有一定的参考学习价值,需要的朋友可以参考下
    2023-07-07

最新评论