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);
  }
}

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

(0)

相关推荐

  • 简单了解SpringMVC全局异常处理常用方法

    项目中,可能会抛出多个异常,我们不可以直接将异常的堆栈信息展示给用户,有两个原因: 用户体验不好 非常不安全 所以,针对异常,我们可以自定义异常处理,SpringMVC 中,针对全局异常也提供了相应的解决方案,主要是通过 @ControllerAdvice 和@ExceptionHandler 两个注解来处理的. 以上传大小超出限制为例,自定义异常,只需要提供一个异常处理类即可: @ControllerAdvice//表示这是一个增强版的 Controller,主要用来做全局数据处理 publi

  • SpringMVC异常处理器编写及配置

    一.编写自定义异常类(作为提示信息) @Data public class SysException extends Exception { private String message; public SysException(String message) { this.message = message; } } 二.编写异常处理器 public class SysExceptionResolve implements HandlerExceptionResolver { @Overrid

  • Springmvc自定义异常处理器实现流程解析

    当dispatchServlet接收到controller抛出的异常时,会将异常交由 HandlerExceptionResolver 异常处理器处理!我们可以创建自定义异常处理器实现该接口来处理自定义异常 1) 自定义异常类 public class MyException extends Exception { // 异常信息 private String message; public MyException() { super(); } public MyException(String

  • SpringMVC统一异常处理三种方法详解

    这篇文章主要介绍了SpringMVC-统一异常处理三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在 Spring MVC 应用的开发中,不管是对底层数据库操作,还是业务层或控制层操作,都会不可避免地遇到各种可预知的.不可预知的异常需要处理. 如果每个过程都单独处理异常,那么系统的代码耦合度高,工作量大且不好统一,以后维护的工作量也很大. 如果能将所有类型的异常处理从各层中解耦出来,这样既保证了相关处理过程的功能单一,又实现了异常信

  • Springmvc异常映射2种实现方法

    请求出现 想要跳转到错误页面 就需要对springmvc进行配置 方法1:基于xml的配置 springmvc.xml配置类 <!--配置基于xml的异常映射--> <bean id="simpleMappingExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!--配置异常和对应页面的映

  • 浅谈springmvc 通过异常增强返回给客户端统一格式

    在springmvc开发中,我们经常遇到这样的问题:逻辑正常执行时返回客户端指定格式的数据,比如json,但是遇NullPointerException空指针异常,NoSuchMethodException调用的方法不存在异常,返回给客户端的是服务端异常堆栈信息,导致客户端不能正常解析数据:这明显不是我们想要的. 幸好从spring3.2提供的新注解@ControllerAdvice,从名字上可以看出大体意思是控制器增强.原理是使用AOP对Controller控制器进行增强(前置增强.后置增强.

  • SpringMvc @Valid如何抛出拦截异常

    SpringMvc中,校验参数可以使用 @Valid 注解,同时在相应的对象里使用 @NotBlank( message = "昵称不能为空") @NotNull( message = "ID不能为空") @Pattern( message = "不能包括空格" , regexp = "\\S+" ) 等等. 这个校验会把所有的参数都校验一遍,所以它的异常里会好些列表,直接使用e.getMessage(),会输出很多累赘的东西

  • 解决python3捕获cx_oracle抛出的异常错误问题

    最近一直在用python写点监控oracle的程序,一直没有用到异常处理这一块,然后日常监控中一些错误笼统的抛出数据库连接异常,导致后续处理的时候无法及时定位问题. 于是早上抽点时间看了下python3关于cx_oracle的异常处理形式. 其实,我只是想在python抛出oracle错误的时候,捕获到具体ora-信息. 写法很简单,这里记录下,以备后用. try: oracle_check(dbname) except cx_Oracle.DatabaseError as msg: print

  • Java 如何优雅的抛出业务异常

    记得上学的时候学习英语,每个英语老师说到英语翻译的时候都会说英语翻译要做到"信.达.雅".如今做了一名程序员竟然体会我还是想用这三种境界来要求自己,恰逢自己现在所做之项目偏业务,代码的优雅显得格外重要.所以我就想写点这方面的东西,今天就先来说说如何优雅的抛出业务异常.代码千千万,只希望对自己和对大家有所帮助. 针对java开发者而言,异常的重要性不言而喻,这里也不再赘述.今天主要说说在业务中利用异常处理机制来实现业务异常的优雅提示. 首先,我们定义一个异常编码接口 public int

  • Python抛出引发异常(raise)知识点总结

    Python中try块可以捕获测试代码块中的错误.except块可以处理错误.finally块可以执行代码,而不管try-和except块的结果如何.本文主要介绍Python 抛出引发异常(raise). Python 常用术语 抛出引发异常(raise) 作为Python开发人员,可以在某些情况下引发异常. 要抛出(或引发)异常,请使用raise关键字. 例如: 当x小于0时,抛出异常并停止程序: x = -1 if x < 0: raise Exception("x需要是大于等于0的数

  • Spring应用抛出NoUniqueBeanDefinitionException异常的解决方案

    前言 我们在开发Spring应用时可能会不小心注入两个相同类型的Bean,比如实现了两个相同Service接口的类,示例伪代码如下: interface SampleService {   String getName(); } class ServiceA implements SampleService{    String getName(){      return "john";    } } class ServiceB implements SampleService{

  • springboot springmvc抛出全局异常的解决方法

    springboot中抛出异常,springboot自带的是springmvc框架,这个就不多说了. springmvc统一异常解决方法这里要说明的是.只是结合了springboot的使用而已.直接上代码,有效有用的才是ok. 1.定义异常捕获 package com.example.rest.error; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.Exce

  • django主动抛出403异常的方法详解

    前言 网上的做法基本都是下面的代码 return HttpResponseForbidden() 试了一下,效果一般,没有异常页面显示,最终显示的是浏览器的异常页面,如下图: 设置方法如下: 如果要想让服务器截获异常并且显示错误页可以用下面的方式: id = request.GET.get('id', '') timestamp = request.GET.get('timestamp', '') accesskey = request.GET.get('accesskey', '') if t

  • JS中异常抛出和处理方法图文详解

    目录 抛出异常 抛出的表达式类型 基本数据类型 对象 类的实例对象 Error 类的实例对象 Error 的子类 处理异常 js中常见的系统异常: 总结 抛出异常 在 js 中,有时候我们需要处理一些异常或错误.比如编写的某个函数所接收的参数要求是 Number 类型的,如果在该函数被调用时传入的是字符串,就需要发出提醒.此时我们可以使用 throw 语句来抛出个异常: // 例 1 function fn(num) { if (typeof num !== 'number') throw '需

  • 窥探Swift编程中的错误处理与异常抛出

    在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中是如何抛出异常的.在编译型语言中,错误一般分为编译错误和运行时错误.我们平时在代码中处理的错误为运行时错误,我们对异常进行处理的操作的目的是为了防止程序出现错误而导致其他的副作用,比如用户数据未保存等等. 在今天的文章中,先给出主动产生异常的几种情况,然后再给出如何处理被动异常. 一.主动退出程序的几种

  • C++异常重抛出实例分析

    如果我们编写了一个函数,函数内部可能会出现异常,但是我们不想在这个函数内处理,而是想要通知调用者,那么C++允许它重抛出这个异常.语法如下: try { //Execute some code } catch (Exception& e) { //Peform some operations before exits throw; } 语句throw重新抛出了异常. 看一个实际的例子: #include <iostream> #include <stdexcept> usi

随机推荐