【问题标题】:How to pass variable from @controller to @controlleradvice如何将变量从@controller 传递给@controlleradvice
【发布时间】:2021-10-09 07:21:29
【问题描述】:

现在我使用 controlleradvice 制作自定义处理程序并且运行良好。我想在“发票流程失败”的自定义验证中添加其他信息。我如何做到这一点?谢谢你

【问题讨论】:

    标签: spring spring-boot spring-mvc


    【解决方案1】:

    您可以定义自己的异常对象并使用它将数据从控制器方法传递到异常处理方法。

    首先定义一个异常为:

    public class InvoiceException extends RuntimeException {
       
        private Long invoiceId;
        private String additionalInfo;
    }
    
    

    然后在控制器中检查是否违反了相关的业务规则,创建这个异常的实例并抛出它:

    public class InvoiceController {
    
      
        @PostMapping("/invoice")
        public Long processInvoice(InvoiceRequest request){
           
              if(fail) {
                 throw new InvoiceException(invoiceId, "foobar");
              }       ​
       ​}
    
    }
    

    @ContorllerAdvice 中,您可以从异常实例中访问这些数据:

    @ControllerAdvice
    public class MyExceptionHandler {
    
     ​@ExceptionHandler(InvoiceException.class)
     ​public ResponseEntity<ErrorMessage> handle(InvoiceException ex) {
     ​
          
     ​}
    }
    

    【讨论】:

    • 如果我们有很多API返回怎么办?我们可以将其设为全局以便我们可以通过它
    • 让什么全球化?
    • 发票异常。如果controlle中有很多endpoint,我们是否可以制作全局类,这样我们就不需要一个一个类了
    • 为什么不自己试试呢?
    • 谢谢先生,我终于可以用你的例子解决了。
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2021-12-31
    • 2020-12-23
    相关资源
    最近更新 更多