首页 > 其他分享 >validation捕获异常

validation捕获异常

时间:2024-05-13 21:41:47浏览次数:15  
标签:捕获 springframework ex ResponseEntity org import validation 异常 Response

好像需要在控制器启用校验才能捕获参数校验,即

@RestController
@Validated

----------------------分隔符-----------------------------

import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.xfstu.rbac.response.Response;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

@RestControllerAdvice
public class GlobalError {

    // 捕获方法参数校验异常
    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody
    public ResponseEntity<Response<?>> constraintViolationExceptionHandler(ConstraintViolationException e){
        Set<ConstraintViolation<?>> message = e.getConstraintViolations();
        List<String> errorMessages = new ArrayList<>();
        message.stream().forEach(msg -> {
            errorMessages.add(msg.getMessage());
        });
        Response<String> errorResponse=Response.error(errorMessages.get(0),400);
        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }

	// 捕获实体参数校验异常
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public ResponseEntity<Response<?>> handleBindException(MethodArgumentNotValidException ex) {
        String fieldError = ex.getBindingResult().getFieldError().getDefaultMessage();
        Response<String> errorResponse=Response.error(fieldError,400);
        return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);
    }
	
	//全局异常
	@ExceptionHandler(Exception.class)
    public ResponseEntity<Response<?>> handleException(Exception ex) {
        System.out.println("异常类"+ex.getClass().getName());
        ex.printStackTrace();
        Response<?> errorResponse=Response.error("Something went wrong."+ex.getMessage(),500);
        return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
    }

}

不是专业的写法

标签:捕获,springframework,ex,ResponseEntity,org,import,validation,异常,Response
From: https://www.cnblogs.com/xfstu/p/18190086

相关文章

  • 宝塔:续签SSL证书报错error_result: During secondary validation
    宝塔上的SSL证书有时候忘了到期前续签,导致续签时候报错:error_result:Duringsecondaryvalidation:或者 该帐户1小时内失败的订单次数超过5次,请等待1小时再重试! 点击SSL当前证书,续签证书处理,是无效的。因此要换种方式: 解决方法如下:1.点击SSL选项框内的“证书夹”选项,删......
  • openGauss 分析查询效率异常降低的问题
    分析查询效率异常降低的问题问题现象通常在几十毫秒内完成的查询,有时会突然需要几秒的时间完成;而通常需要几秒完成的查询,有时需要半小时才能完成。处理办法通过下列的操作步骤,分析查询效率异常降低的原因。使用analyze命令分析数据库。analyze命令更新所有表中数据大小以......
  • Go语言异常处理:自定义错误【errors.New+panic】
    程序本身抛出的异常信息不是太友好,我们可以自定义错误或者异常的信息,需要使用errors包中的New函数来包装一下异常或错误信息;在使用内置函数panic(err),把异常信息后面的程序执行终止掉,因为再执行后面的程序也没有意义了。 packagemainimport"fmt"import"errors"funcma......
  • python教程13-异常处理
    异常处理流程:流程示例: 抛出异常自定义异常 ......
  • 异常
    处理异常五个关键字:try、catch、finally、throw、throwstry{监控区域}catch(想要捕获的异常类型){sout输入内容}例:publicstaticvoidmain(String[]args){inta=1;intb=0;try{//try可以去监控区域System.out.println(a/b);}catch(Arithmet......
  • 线程池中抛出的异常,主线程可以catch到吗
    印象中,线程池抛出的异常主线程可以catch到,但前段时间碰到个问题,在系统出现异常时,由于线程池任务中没有catch异常的代码,主线程虽有catch异常代码,但却没有catch到异常,导致排查问题比较费劲。故对此处进行研究,并记录。一、JVM异常处理先来看一下jvm对未捕获的异常如何处理1......
  • 在 WinForms 应用程序中处理未经处理的异常
    internalstaticclassProgram{///<summary>///应用程序的主入口点。///</summary>[STAThread]staticvoidMain(){//添加事件处理程序以捕获主UI线程中发生的所有异常Application.......
  • 音视频播放异常现象总结
    播放卡顿或者卡住:1流媒体不发流给客户端,客户端停在当前画面不动也不销毁,也不重拉流;2弱网环境,tcp乱序,且发包间隔时间比较大,播放器收一包耗时较多,导致解码异常卡主;3流媒体(发流端)数据插入一些增强帧,其他的P帧等(一般是某些公司的定制)导致播放器得到的数据不是一个连续的GOP;解码......
  • Oracle异常(二)
    ORA-01704:字符串文字太长当我们在Oracle数据库中插入或更新一个字符串时,如果字符串的长度超过数据库的限制,就会出现ORA-01704错误。这个错误的具体描述是“字符串文字太长”。在Oracle数据库中,一个字符串的长度不能超过4000个字符。如果字符串超过了这个限制,将导致ORA-01704错误......
  • Java异常处理的最佳实践
      本文是关于Exception处理的一篇不错的文章,从JavaException的概念介绍起,依次讲解了Exception的类型(Checked/Unchecked),Exception处理的最佳实现:选择Checked还是Unchecked的几个经典依据Exception的封装问题如无必要不要创建自己的Exception不要用Excepti......