当前位置: 首页 > 知识库问答 >
问题:

如何在spring boot中解决或编写相同的异常处理程序?

司空高义
2023-03-14

正如您所看到的,我使用了两个参数相同的错误捕获方法,但是当我运行它时,我得到了以下错误。我使用它们的原因是因为spring boot也会抛出相同的异常@Email和@Size,所以我想捕捉它们并显示我自己的错误输出。如何在不同的时间运行这两个程序而不出错?例如,当您不键入@符号时,我希望通过闪烁相关的错误输出来显示我自己的错误,或者如果密码长度较短,我希望显示相关的错误输出。

组织。springframework。豆。BeanInstationException:未能实例化[org.springframework.web.servlet.HandlerExceptionResolver]:工厂方法“HandlerExceptionResolver”引发异常;嵌套的例外是java。lang.IllegalStateException:为[class javax.validation.ConstraintViolationException]映射的@ExceptionHandler方法不明确:{public az.expressbank.task.response.ExceptionResponse az.expressbank.task.api.controller.EmployeeRestapieExceptionHandlerController.CatchWhentPeErrorEmailRegisterPage(javax.validation.ConstraintViolationException),公共az。快递银行。任务回答例外回复az。快递银行。任务应用程序编程接口。控制器。EmployeeRestapieExceptionHandlerController。catchWhenTypeShortPasswordRegisterPage(javax.validation.ConstraintViolationException)}

    @ExceptionHandler(ConstraintViolationException.class)
            @ResponseStatus(HttpStatus.BAD_REQUEST)
            public ExceptionResponse catchWhenTypeWrongEmailRegisterPage(ConstraintViolationException exception) {
                Exception exception1=new Exception();
                ExceptionResponse exceptionResponse = new ExceptionResponse();
                exceptionResponse.setMessage(Message.PASSWORD_MUST_NOT_BE_SHORT.getMessage());
                exceptionResponse.setCode(550);
                return exceptionResponse;
            }
        
        
            @ExceptionHandler(ConstraintViolationException.class)
            @ResponseStatus(HttpStatus.BAD_REQUEST)
            public ExceptionResponse catchWhenTypeShortPasswordRegisterPage(ConstraintViolationException exception) {
        
                ExceptionResponse exceptionResponse = new ExceptionResponse();
                exceptionResponse.setMessage(Message.WRONG_FORMAT.getMessage());
                exceptionResponse.setCode(551);
                return exceptionResponse;
        
            }

共有1个答案

轩辕煜
2023-03-14

对于每种类型的异常,只能有一个异常处理程序。这意味着您必须依靠检查异常实例的状态来确定故障的根本原因。

请注意,如果未能在@PathVariable@RequestParam上验证,它将抛出ConstraintViolationException,而如果未能验证请求正文,则抛出MethodArgumentNotValidException

对于ConstraintViolationException,您可以参考此示例了解如何定义每个验证器的错误代码,并找出该故障验证器的相应错误代码。

对于MethodArgumentNotValidException,您可以参考以下代码了解导致失败的验证器。

java prettyprint-override">@ExceptionHandler(MethodArgumentNotValidException.class)
public ExceptionResponse handle(MethodArgumentNotValidException exp) {

    BindingResult bindingResult = exp.getBindingResult();
    bindingResult.getAllErrors().forEach(err -> {
        err.getCode() // simple class name of the validator annotation that cause the exception such as Email /Size 
        err.getDefaultMessage () 
    });
}
 类似资料:
  • 我试图抓住无效的json,而解析它与jiffy在牛仔web套接字处理程序。如果json是有效的/无效的,我想转发一个适当的消息到,它将回复客户端。这是我的代码。 这会导致运行时异常。 12:07:48.406[错误]牧场侦听器http已连接到进程 那我该怎么做呢?

  • 本文向大家介绍springboot全局异常处理详解,包括了springboot全局异常处理详解的使用技巧和注意事项,需要的朋友参考一下 一、单个controller范围的异常处理 说明: 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类) 该异常处理方法只在当前的controller中起作用 二、全部controller范围内起

  • 本文向大家介绍SpringBoot如何优雅地处理全局异常详解,包括了SpringBoot如何优雅地处理全局异常详解的使用技巧和注意事项,需要的朋友参考一下 前言 之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Controller下面,满屏幕的try{}cat

  • 我正在为班级做一个项目,我们的任务是设计一个包含5个选项的计算器程序。如果用户输入的选项不在1和5之间,当我试图编码以捕获时,我面临一个问题。当前,如果用户输入6到9之间的数字。第一次捕获异常时,将显示一条错误消息,提示输入1到5之间的选项,并显示一条重新输入的消息。但是,如果用户继续输入6到9之间的数字,则不会显示错误消息,并显示主菜单。我还试图捕捉输入字符串而不是1和5之间的选择,并显示不同的

  • 我有一个带post请求的控制器。我试图用一个简单的NotNull注释验证POJO。我正在使用ControllerAdvice来处理异常。 所以我尝试使用它,但当我启动应用程序时,我得到了以下信息: 因此,我想为BindException创建自己的处理程序,但当我为BindException类创建ExceptionHandler时,spring应用程序不会启动。如果我注释掉handleBindExc

  • 我使用Refught2调用kotlin协同程序的API,但API的状态代码为200、400和700。当请求API和响应状态代码为400或700时,“withTimeout”协同程序可能会异常崩溃。我想处理带有“withTimeout”协同程序的状态代码400和700响应消息,或者如何自定义“协同程序”谢谢。 这是我的密码 错误消息