首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java play自定义onServerError在exception ()内部抛出异常时不会触发

Java Play是一个用于构建Web应用程序的开源框架,它基于Java语言。在Play框架中,可以通过自定义onServerError方法来处理在应用程序内部抛出的异常。

当在exception()方法内部抛出异常时,不会触发自定义的onServerError方法。这是因为exception()方法是在处理请求期间捕获异常并返回错误页面的方法,而不是触发onServerError方法的地方。

要在exception()方法内部抛出异常时触发onServerError方法,可以使用Play框架提供的Http.RequestHeader类的withAttrs()方法。该方法允许我们在请求头中添加自定义属性,然后在onServerError方法中检查该属性是否存在来判断是否有异常发生。

以下是一个示例代码:

代码语言:java
复制
import play.mvc.Http;
import play.mvc.Result;
import play.mvc.Results;

public class MyController extends Controller {

  public Result exception() {
    try {
      // 在这里抛出异常
      throw new Exception("Something went wrong");
    } catch (Exception e) {
      // 将异常信息添加到请求头中
      Http.RequestHeader requestHeader = request().withAttrs(Attrs.create(Attrs.EXCEPTION, e));
      // 调用onServerError方法处理异常
      return onServerError(requestHeader);
    }
  }

  @Override
  protected Result onServerError(Http.RequestHeader request, Throwable exception) {
    // 检查请求头中是否存在异常信息
    Optional<Throwable> optionalException = request.attrs().getOptional(Attrs.EXCEPTION);
    if (optionalException.isPresent()) {
      Throwable e = optionalException.get();
      // 在这里处理异常
      return Results.internalServerError("An error occurred: " + e.getMessage());
    } else {
      // 如果没有异常信息,则调用父类的方法处理异常
      return super.onServerError(request, exception);
    }
  }
}

在上述示例中,我们在exception()方法中抛出了一个异常,并将该异常信息添加到请求头中。然后,在onServerError方法中,我们检查请求头中是否存在异常信息,如果存在,则处理异常并返回自定义的错误页面。如果不存在异常信息,则调用父类的方法处理异常。

这样,当在exception()方法内部抛出异常时,就会触发自定义的onServerError方法,并进行相应的处理。

关于Play框架的更多信息和相关产品,你可以参考腾讯云的文档和官方网站:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter | 异常处理

Dart 可以抛出和捕获异常,如果没有被捕获,则会抛出,最终导致程序终止运行 和 Java 不同,Dart 中的所有异常非检查异常,方法不会声明它们抛出异常,也不要求捕获任何异常 Dart 提供了...也可以自定义异常类型。此外,Dart 程序可以抛出任何 非null 对象,不仅限 Exception 和 Error 对象。...例如 java 是多线程模型的编程语言,任意一个线程触发异常异常没有被捕获,就会导致整个进程退出,但是 Dart 不会,因为 Dart 是单线程模型,运行机制很相似,但是还是有一些区别,下面根据一张图来大致看一下...这样一来,我们 app 中所有调用 print 方法输入日志的行为都会被拦截,通过这种方式,我们也可以应用中记录日志,等到应用触发未捕获的异常,将以此和日志进行上报 onError Zone...需要注意的是 error-zone 内部发生的错误是不会跨越 error-zone 边界的,如果想跨越 error-zone 边界去捕获异常,可以通过共同的源 zone 来捕获,如: var future

78110

Java异常处理

当方法抛出异常列表中的异常,方法将不对这些类型及其子类类型的异常作处理,而抛向调用该方法的方法,由他去处理。...语句定义方法体内,只能抛出一个异常对象。 抛出异常可以方法内,自行通过 try...catch...finally 进行处理,也可以借由 throws通知方法调用者,应用时进行处理。...方法中, throw和return都会触发方法中断操作,因此未加入判断的情况下,不可同时出现。 如图:错误提醒为:Unreachable code 当加入if判断后,错误提示消失。...如图,getResult方法中, 针对输入数据可能不是5的倍数的情况,通过throw抛出异常,并设定 异常描述信息,所抛出异常由方法内部自行try.. catch处理。...自定义异常 Java 中你可以自定义异常。编写自己的异常需要记住下面的几点。 所有异常都必须是 Throwable 的子类。 如果希望写一个检查性异常类,则需要继承 Exception 类。

1.1K30

【JavaSE】Java入门九(异常详解)

1.Java异常的体系结构 异常的种类繁多,Java内部维护了一个异常的体系结构如下: Java中可以说是把所有的异常体系都封装了起来,程序中遇到各种问题,JVM会直接定位异常情况并在控制台提示...其中Throwable是异常体系的顶层类,它的内部实现了让Java虚拟机抛出错误的代码。他派生出两个重要的子类Error和Exception。...下面是异常处理的注意事项: 我们可以方法体内部通过throw抛出一个Exception异常异常一旦抛出后续代码就不会执行,我们可以通过异常捕获来使后续代码可以继续执行。...throws声明异常并没有进行处理,而是留给了调用者进行处理,调用者调用声明抛出异常的方法,必须对该异常进行处理,或者继续使用throws抛出。...但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return. 3.自定义异常Java 中虽然已经内置了丰富的异常

10110

JavaSE异常

前言 使用Java编写代码,我们难免会遇到数组越界、运行超时、栈溢出等异常问题。所以如果我们熟练掌握异常的定义和使用,这对我们学习Java有很大的帮助。  ...Java当中,为了对不同异常或者错误进行很好的分类管理,Java内部维护了一个异常的体系结构: Throwable:派生出Error和Exception两个子类; Error:代表是Java虚拟机无法解决的严重问题...二、异常抛出和捕获 1.异常抛出 throw new ***("异常产生的原因"); 1. throw必须写在方法体内部 2....如果抛出的是编译异常,用户必须处理,否则无法通过编译 5....方法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型 具有父子关系,直接声明父类即可。

15530

(24) 异常 (上) 计算机程序的思维逻辑

Java的默认异常处理机制是退出程序,异常发生点后的代码都不会执行,所以示例代码中最后一行System.out.println("end")不会执行。...就是抛出异常,它会触发Java异常处理机制。之前的空指针异常中,我们没有看到throw的代码,可以认为throw是由Java虚拟机自己实现的。...主要是为了名字不同,异常类的名字本身就代表了异常的关键信息,无论是抛出还是捕获异常,使用合适的名字都有助于代码的可读性和可维护性。...自定义异常 除了Java API中定义的异常类,我们也可以自己定义异常类,一般通过继承Exception或者它的某个子类,如果父类是RuntimeException或它的某个子类,则自定义异常也是unchecked...exception,如果是ExceptionException的其他子类,则自定义异常是checked exception

55860

三十一、Hystrix触发fallback降级逻辑的5种情况及代码示例

第一个请求其实是失败哦所有抛出异常信息 健康信息:HealthCounts[0 / 0 : 0%],断路器是否打开:false java.lang.NullPointerException: null...$FallabckDemo.run(TestFallback.java:28) ... // 因为这次请求是正常的,所以后面就不会根有异常栈了。...", underlying);,而我的日志级别是debug,所以控制台里都会打印run里面的异常信息~ 另外,下面的异常类型因为不是run方法里面的,所以默认是不会打印输出的哦 ---- 第二种...该异常由HystrixContextScheduler里去申请线程池资源抛出 对应方法名:handleThreadPoolRejectionViaFallback(Exception underlying...---- 第五种:failed执行失败 触发条件:command执行失败,也就是你的run方法里执行失败(抛出了运行时异常,执行此部分逻辑 异常类型:run方法里的任意运行时异常类型,比如NPE异常

4.4K41

Java Review(三十二、异常处理)

需要注意的是,所有的异常都是由 Throwable 继承而来,但在下一层立即分解为两个分支:Error 和 Exception: Error 类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误...设计 Java 程序时, 需要关注 Exception 层次结构。 这个层次结构又分解为两个分支: Checked异常和 Runtime 异常 (运行时异常) 。...如果程序没有处理 Checked异常,该程序在编译就会发生错误,无法通过编译。 Checked 异常体现了 Java 的设计哲学一一没有完善错误处理的代码根本就不会被执行 !...在这种情况下,可以自定义异常类。 是定义一个派生于Exception 的类,或者派生于 Exception 子类的类。例如, 定义一个派生于 IOException 的类。...异常从thirdMethod方法开始触发 , 传到 secondMethod 方法,再传到firstMethod 方法, 最后传到 main 方法, main 方法终止, 这个过程就是 Java异常跟踪栈

74810

异步事务?关于异步@Async + 事务@Transactional的结合使用问题分析【享学Spring MVC】

java.lang.RuntimeException: 抛出运行异常 at com.fsx.service.HelloServiceImpl.enter(HelloServiceImpl.java...: eat抛出运行异常 at com.fsx.service.HelloServiceImpl.eat(HelloServiceImpl.java:47) 现象:两个异常信息都有输出,异步线程生效,insert...插入均没有生效(双双完成回滚) 结论:主线程和子线程的事务上是相互隔离的,子线程的异常不会影响主线程的事务混滚与否(让若主线程不主动throw出异常,子线程即使抛出异常不会影响主线程的)。...throw new RuntimeException("play抛出运行异常"); } } 请注意示例区别:enter方法并没有主动throw抛出异常。...enter异步调用eat,eat再异步调用play,并且play里没有抛出异常 现象:user插入成功。

8.8K41

《JavaSE-第十三章》之异常体系

Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。...异常一旦抛出,其后的的代码就不会执行。 3.4编译异常处理 异常处理方式一: 方法声明时参数列表后,当方法中抛出编译异常用户不想处理该异常,此时就可以使用throws将异常给方法的调用者来处理。...,如果抛出异常类型与catch异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到JVM收到后中断程序----异常是按照类型来捕获的。...// throw :方法内部直接创建一个异常对象,并从此点抛出 // throws : 用在方法申明上的,抛出方法内部异常...// throw :方法内部直接创建一个异常对象,并从此点抛出 // throws : 用在方法申明上的,抛出方法内部异常

16420

认识异常(2)

Java中,可以借助throw关键字,抛出一个指定的异常对象(我们需要new一个异常类),将错误信息告知给调用者。 这是我们自己手动抛出异常,当然也存在我们无意中代码错误产生的异常。...如果这两种一种都没达成,则系统不会运行。 ❤️❤️当子类重写父类的方法,父类存在throws声明,子类可以选择是否抛出相同的异常或者抛出父类方法声明中的异常的子类。...那就没有捕获到,这里的代码就不会被执行 ​ 注意try中的代码可能会抛出异常,也可能不会抛出异常。...try-catch注意事项 【注意事项】: 1. try块内抛出异常位置之后的代码将不会被执行 2.如果抛出异常类型与catch异常类型不匹配,即异常不会被成功捕获,也就不会被处理。...自定义异常类需要继承自Exception 或者 RunTimeException ,并且实现一个带有String类型参数的构造方法。 其内部参数message含义:出现异常的原因。

14310

JavaSE异常

JavaSE异常 一、异常的概念 Java中,将程序执行过程中发生的不正常行为称为异常 常见逻辑异常: 算数异常 System.out.println(10 / 0); // 执行结果 Exception...二、异常的体系结构 Java内部维护了一个异常的体系结构: 说明: Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception Error:指的是Java虚拟机无法解决的严重问题...: throw必须写在方法体内部 抛出的对象必须是Exception 或者 Exception 的子类对象 如果抛出的是 RunTimeException 或者 RunTimeException...的子类,则可以不用处理,直接交给JVM来处理 如果抛出的是编译异常,用户必须处理,否则无法通过编译 异常一旦抛出,其后的代码就不会执行 throws:将异常抛给方法的调用者来处理 修饰符...catch异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到JVM收到后中断程序----异常是按照类型来捕获的 try中可能会抛出多个不同的异常对象,则必须用多个catch来捕获-

28520

Java的”异常“超详细讲解

,也可以说异常也是一种类 但是我们日常编写项目,错误是时常发生的。...而异常又分为运行时异常和编译异常; 编译异常: 编译无法通过,编译器会进行提醒。也称为受检查异常(Checked Exception) 运行时异常: 可以通过编译,但是运行后会报错。...(由方法来实现抛出抛出对象必须是Exception或是其子类 默认情况下:RuntimeException及其子类可以通过JVM处理 异常一旦抛出,其后的代码就不会执行 我们可以看到,IDEA中,...Exception 或者 Exception 的子类 方法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型 具有父子关系,直接声明父类即可。...注意事项: try块内抛出异常位置之后的代码将不会被执行 如果抛出异常类型与catch异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到 JVM收到后中断程序----异常是按照类型来捕获的

7810

探讨通过Feign配合Hystrix进行调用时异常的处理

场景及痛点 单个项目是通过 Jersey 来实现 restful 风格的架构 发生异常异常信息总是提示没有回调方法,不能显示基础服务抛出异常信息 暂时没有考虑发生异常之后进行回调返回特定内容 业务系统通过...feign 调用基础服务,基础服务是会根据请求抛出各种请求异常的(采用标准http状态码),现在我的想法是如果调用基础服务发生请求异常,业务系统返回的能够返回基础服务抛出的状态码 当然基础服务抛出的请求异常不能触发...,由此可以看出如果抛出异常如果是 HystrixBadRequestException 是直接处理异常之后进行抛出(这里不会触发熔断机制),而不是进入回调方法。...解决方案 那么我们对于请求异常的解决方案就需要通过 HystrixBadRequestException 来解决了(不会触发熔断机制),根据返回响应创建对应异常并将异常封装进 HystrixBadRequestException...总结 本文主要出发点在于如何解决 Feign 中使用 Hystrix 被调用端抛出请求异常的问题。

2.2K50

PHP笔记 | 异常处理

抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性, PHP代码中的异常通过throw抛出异常抛出之后,后面的代码将不会再被执行。...既然抛出异常会中断程序执行,那么为什么还需要使用异常处理? 异常抛出被用于遇到未知错误, 或者不符合预先设定的条件, 通知客户程序,以便进行其他相关处理,不至于使程序直接报错中断。...1"); } return true; } // "try" 代码块中触发异常 try{ checkNum(2); //如果异常抛出,那么下面一行代码将不会被输出...); } return true; } // "try" 代码块中触发异常 try{ checkNum(2); //如果异常抛出,那么下面一行代码将不会被输出...实际应用中,不会轻易的抛出异常, 只有极端情况或者非常重要的情况下,才会抛出异常抛出异常,可以保障程序的正确性与安全,避免导致不可预知的bug。

97630

JNI 异常处理

; 如果在Java中发生运行时异常,没有使用try...catch来捕获,会导致程序直接奔溃退出,后续的代码都不会被执行; 编译异常,是方法声明时显示用throw声明了某一个异常,编译器要求调用的时候必须显示捕获处理...; 而在JNI中,由于JNI没有像Java一样有try...catch...final这样的异常处理机制,面且本地代码中调用某个JNI接口如果发生了异常,后续的本地代码不会立即停止执行,而会继续往下执行后面的代码...(); env->ExceptionClear();//清除引发的异常Java不会打印异常堆栈信息,如果不清除,后面的调用ThrowNew抛出异常堆栈信息会 //覆盖前面的异常信息...Java不会打印异常堆栈信息,如果不清除,后面的调用ThrowNew抛出异常堆栈信息会//覆盖前面的异常信息    jclass cls_exception = env->FindClass(...; ThrowNew:在当前线程触发一个异常,并自定义输出异常信息 jint (JNICALL *ThrowNew) (JNIEnv *env, jclass clazz, const char *msg

96310

Java SE】认识异常

, Error 和 Exception Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表: StackOverflowError和OutOfMemoryError...注意事项: throws必须跟在方法的参数列表之后 声明的异常必须是 Exception 或者 Exception 的子类 方法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间用逗号隔开...【注意事项】 try块内抛出异常位置之后的代码将不会被执行 如果抛出异常类型与catch异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到JVM收到后中断程序----异常是按照类型来捕获的...但是如果finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return. 2.3异常抛出 Java中,可以借助throw...【注意事项】 throw必须写在方法体内部 抛出的对象必须是Exception 或者 Exception 的子类对象 如果抛出的是 RunTimeException 或者 RunTimeException

32630

Java中事务的理解

2.特定方法单独进行声明(最终结果事务生效) 就像其它语言中使用的方式一样,就是方法内部,自己来进行 try catch 进行异常捕获,开启事务,如果出现异常就回滚。...//捕获异常处理机制 tx.rollback();//事務回滾 } 3.配合注解及自定义异常处理逻辑(最终结果事务生效) 我代码中最终使用的是这种方式,方法顶部正常声明@Transaction...,但是由于我是调用了相应 service 下的方法进行推送消息的动作,该方法内部如果我直接抛出异常,但却不想在该方法内部进行异常捕获处理,我可以直接给该方法加上 throws Exception,这样调用方法的部分就可以直接处理异常...java异常分类 通过不断比较发现, java springboot 系统中异常都是继承自 Throwable,Error 及 Exception 都是继承自该 Throwable,而 Exception...,它们又有个归纳的上级异常类,就是 RuntimeException,所以,我的解决方法就是自己捕获异常,同时 catch 中抛出异常的类另是 RuntimeException,这样事务就可以正常执行

15810

一文彻底读懂MySQL事务的四大隔离级别

2.特定方法单独进行声明(最终结果事务生效) 就像其它语言中使用的方式一样,就是方法内部,自己来进行 try catch 进行异常捕获,开启事务,如果出现异常就回滚。...//捕获异常处理机制 tx.rollback();//事務回滾 } 3.配合注解及自定义异常处理逻辑(最终结果事务生效) 我代码中最终使用的是这种方式,方法顶部正常声明@Transaction...,但是由于我是调用了相应 service 下的方法进行推送消息的动作,该方法内部如果我直接抛出异常,但却不想在该方法内部进行异常捕获处理,我可以直接给该方法加上 throws Exception,这样调用方法的部分就可以直接处理异常...java异常分类 通过不断比较发现, java springboot 系统中异常都是继承自 Throwable,Error 及 Exception 都是继承自该 Throwable,而 Exception...,它们又有个归纳的上级异常类,就是 RuntimeException,所以,我的解决方法就是自己捕获异常,同时 catch 中抛出异常的类另是 RuntimeException,这样事务就可以正常执行

63410

Flask 学习-69.捕获异常钩子函数errorhandler

前言 flask 运行请求出现异常,会先触发对应的异常钩子,比如出现404,会根据NotFound 异常类返回404状态码。...当我们访问一个不存在的地址,先抛出NotFound异常,然后触发异常钩子,返回对应的code和description 于是我们可以自定义这个404 页面 <!...当一个蓝图处理抛出异常的请求蓝图中注册的出错处理器优先于应用中全 局注册的出错处理器。 但是,蓝图无法处理 404 路由错误,因为 404 发生的路由级 别还不能检测到蓝图。...如果同时基于 HTTPException 和 Exception 注册了异常处理器, Exception 处理器不会处理 HTTPException 子类,因为 HTTPException 更有针对性。...未处理的异常 500 当一个异常发生,如果没有对应的异常处理器,那么就会返回一个 500 内部服务错误。关于此行为的更多内容参见 flask.Flask.handle_exception() 。

1.4K20
领券