首页 > 其他分享 >spring-boot-starter-validation数据校验全局异常拦截处理(转发)

spring-boot-starter-validation数据校验全局异常拦截处理(转发)

时间:2023-05-15 10:33:41浏览次数:46  
标签:return String spring boot import msg org validation 异常

原版参考:https://blog.csdn.net/tangyb828/article/details/126884417

特殊备注:简要整理笔记,非原著

一、引用Maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

二、使用拦截方式:

1、BindingResult对象接受和处理异常;
    @PostMapping("/taxinfoSearch")
    public Object taxinfoSearch(@Validated @RequestBody TaxRequestOrgInfo request, BindingResult bindingResult){
        if (bindingResult.hasErrors()) {
            String messages = bindingResult.getAllErrors()
                    .stream()
                    .map(ObjectError::getDefaultMessage)
                    .reduce((m1, m2) -> m1 + ";" + m2)
                    .orElse("参数输入有误!");
            return TaxOutResponse.loadResponseMsg(messages);
        }
        return orgInfoService.orgTaxInfoSearch(request).get(AjaxResult.DATA_TAG);
    }

 2、异常类拦截:

package dbgo.aei.qdtax;

import dbgo.aei.common.core.model.TaxOutResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.util.stream.Collectors;

/**
 * Description  validation拦截器
 * Author justin.jia
 * Date 2023/5/15 9:58
 **/
@Order(80)
@RestControllerAdvice
public class ValidationExceptionHandle {
    //日志文件
    public Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * BindException异常处理
     * <p>BindException: 作用于@Validated @Valid 注解,仅对于表单提交有效,对于以json格式提交将会失效</p>
     *
     * @param e BindException异常信息
     * @return 响应数据
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(BindException.class)
    public TaxOutResponse bindExceptionHandler(BindException e) {
        String msg = e.getBindingResult().getFieldErrors()
                .stream()
                .map(n -> String.format("%s: %s", n.getField(), n.getDefaultMessage()))
                .reduce((x, y) -> String.format("%s; %s", x, y))
                .orElse("参数输入有误");

        logger.error("BindException异常,参数校验异常:{}", msg);
        return TaxOutResponse.loadResponseMsg(msg);
    }

    /**
     * MethodArgumentNotValidException-Spring封装的参数验证异常处理
     * <p>MethodArgumentNotValidException:作用于 @Validated @Valid 注解,接收参数加上@RequestBody注解(json格式)才会有这种异常。</p>
     *
     * @param e MethodArgumentNotValidException异常信息
     * @return 响应数据
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public TaxOutResponse methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
        String msg = e.getBindingResult().getFieldErrors()
                .stream()
                .map(n -> String.format("%s: %s", n.getField(), n.getDefaultMessage()))
                .reduce((x, y) -> String.format("%s; %s", x, y))
                .orElse("参数输入有误");
        logger.error("MethodArgumentNotValidException异常,参数校验异常:{}", msg);
        return TaxOutResponse.loadResponseMsg(msg);
    }

    /**
     * ConstraintViolationException-jsr规范中的验证异常,嵌套检验问题
     * <p>ConstraintViolationException:作用于 @NotBlank @NotNull @NotEmpty 注解,校验单个String、Integer、Collection等参数异常处理。</p>
     * <p>注:Controller类上必须添加@Validated注解,否则接口单个参数校验无效</p>
     *
     * @param e ConstraintViolationException异常信息
     * @return 响应数据
     */
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(value = ConstraintViolationException.class)
    public TaxOutResponse constraintViolationExceptionHandler(ConstraintViolationException e) {
        String msg = e.getConstraintViolations()
                .stream()
                .map(ConstraintViolation::getMessage)
                .collect(Collectors.joining("; "));

        logger.error("ConstraintViolationException,参数校验异常:{}", msg);
        return TaxOutResponse.loadResponseMsg(msg);
    }
}

 

标签:return,String,spring,boot,import,msg,org,validation,异常
From: https://www.cnblogs.com/xibei666/p/17401071.html

相关文章

  • Pbootcms留言“提交成功”的提示语修改
     按照这个路径地址来修改下文件/apps/home/controller/MessageController.php 我自己电脑大概在103行,可以搜索提交成功快捷查询下。  ......
  • SpringBoot2原理篇-黑马
     原理篇1自动配置1.1bean的加载方式【一】1自动配置1.1bean的加载方式【一】1.1.1环境准备创建一个新的工程模块【Maven的,不是SpringBoot的】 直接创建 一个全新的Maven工程【添加坐标】<dependencies><dependency><groupId>org.spring......
  • 【SpringBoot】【配置加载】 SpringBoot配置加载解析时机原理
    1 前言不知道大家对于配置文件的加载有没有考虑过是什么时候加载解析的,这节我们就来看看。2 执行入口我们就先来看看加载配置的入口,核心类就是 ConfigFileApplicationListener主要作用就是读取应用的配置文件并add到Environment的PropertySources列表里。那么实际的执行过......
  • WebApplicationInitializer究 Spring 3.1之无web.xml式 基于代码配置的servlet3.0应用
    大家应该都已经知道Spring3.1对无web.xml式基于代码配置的servlet3.0应用。通过spring的api或是网络上高手们的博文,也一定很快就学会并且加到自己的应用中去了。PS:如果还没,也可以小小参考一下鄙人的上一篇文章<<探Spring3.1之无web.xml式基于代码配置的servlet3.0应用>>。    ......
  • 一天吃透SpringCloud面试八股文
    1、什么是SpringCloud?Springcloud流应用程序启动器是基于SpringBoot的Spring集成应用程序,提供与外部系统的集成。SpringcloudTask,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。SpringCloud各个微服务之间为什么要用http交互?难道不慢吗?Spr......
  • 【转载】SpringBoot自带的工具类
    断言对象、数组、集合ObjectUtilsStringUtilsCollectionUtils文件、资源、IO流FileCopyUtilsResourceUtilsStreamUtils反射、AOPReflectionUtils[AopUtils][AopContext]最近发现同事写了不少重复的工具类,发现其中很多功能,Spring自带的都有。于是整......
  • 利用SpringBoot实现增删改查
    启动类//@MapperScan("")//@SpringApplicationpackagecom.example.demo;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@Mapp......
  • 一不小心,你就掉进了Spring延迟初始化的坑!
    前言  书接上回,之前我们有聊到Spring的延迟初始化机制,是什么,有什么作用。今天跟各位大佬分享一下,我在使用Spring延迟初始化踩过的一些坑。List<坑>坑列表=newArrayList<>(2);  首先,让我们回顾一下Spring延迟初始化的概念。在Spring中,延迟初始化指的是将Bean......
  • Errors:java: 程序包org.springframework.stereotype不存在(解决方法)
    错误截图错误描述java:程序包org.springframework.stereotype不存在解决更改maven项目运行时的编译方式为maven找到File->Settings->Maven->Runner,进行勾选......
  • SpringMVC中多个拦截器的执行顺序
    在SpringMVC中,多个拦截器的执行顺序是由配置文件中拦截器的顺序来决定的。假设我们有3个拦截器:Interceptor1、Interceptor2、Interceptor3,通过配置文件的方式定义拦截器的顺序,例如:<mvc:interceptors><mvc:interceptor><mvc:mappingpath="/**"/><bean......