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

Jersey中的全局异常处理

缪坚诚
2023-03-14

有没有办法在泽西进行全局异常处理?与其单个资源具有try/catch块,然后调用一些方法来清理所有要发回客户端的异常,我希望有一种方法可以将其放在实际调用资源的地方。这可能吗?如果是这样,怎么做?

相反,wheresanitize(e)会向Jersey servlet抛出某种Jersey配置的异常:

@GET
public Object getStuff() {
    try {
        doStuff();
    } catch (Exception e) {
        ExceptionHandler.sanitize(e);
    }
}

有:

@GET
public Object getStuff() throws Exception {
    doStuff();
}

其中异常将被抛出到我可以拦截并从那里调用sanitize(e)的东西。

这实际上只是为了简化所有Jersey资源,并确保返回给客户机的异常总是以某种可以理解的形式出现。

共有3个答案

廉飞捷
2023-03-14

以上所有答案仍然有效。但对于最新版本的spring Boot,请考虑以下方法之一。

方法1:@ExceptionHandler-使用此注释在控制器中注释方法。

这种方法的缺点是我们需要在每个控制器中编写一个带有此注释的方法。

我们可以通过使用基本控制器扩展所有控制器来解决此解决方案(该基本控制器可以有一个用@ExceptionHandler注释的方法。但这可能并不总是可能的。

方法2:

>

  • 使用@ControllerAdvice注释类,并使用@ExceptionHandler定义方法

    这类似于基于控制器的异常(参考方法1),但这是在控制器类不处理异常时使用的。这种方法适合在Rest Api中全局处理异常

  • 萧辰沛
    2023-03-14

    javax.ws.rs.ext.ExceptionMapper是你的朋友。

    资料来源:https://jersey.java.net/documentation/latest/representations.html#d0e6665

    例子:

    @Provider
    public class EntityNotFoundMapper implements ExceptionMapper<javax.persistence.EntityNotFoundException> {
      public Response toResponse(javax.persistence.EntityNotFoundException ex) {
        return Response.status(404).
          entity(ex.getMessage()).
          type("text/plain").
          build();
      }
    }
    
    裴韬
    2023-03-14

    对JAX-RS有一个例外标记的概念。您可以创建自己的ExceptionMapper接口,将任何异常映射到响应。有关更多信息,请参阅:https://jersey.github.io/documentation/latest/representations.html#d0e6352

     类似资料:
    • 统一错误处理 文档:https://eggjs.org/zh-cn/tutorials/restful.html 自定义一个异常基类 // app / exceptions / http_exceptions.js class HttpExceptions extends Error { constructor(msg='服务器异常', code=1, httpCode=400) {

    • Middleware: 全局异常处理 我们在岩浆的实例其实已经注意到了,compose 的连接方式,让我们有能力精确控制异常。 Koa中间件最终行为强依赖注册顺序,比如我们这里要引入的异常处理,必须在业务逻辑中间件前注册,才能捕获后续中间件中未捕获异常,回想一下我们的调度器实现的异常传递流程。 <?php class ExceptionHandler implements Middleware

    • 在做android项目开发时,大家都知道如果程序出错了,会弹出来一个强制退出的弹出框,这个本身没什么问题,但是这个UI实在是太丑了,别说用户接受不了,就连我们自己本身可能都接受不了。虽然我们在发布程序时总会经过仔细的测试,但是难免会碰到预料不到的错误。 今天就来自定义一个程序出错时的处理,类似iphone的闪退。(虽然闪退也是用户不愿意看到的,但是在用户体验上明显比那个原生的弹窗好多了) 废话不多

    • 问题内容: 有没有办法在Jersey中进行全局异常处理?我希望有一种方法可以将其放置在实际调用资源的地方,而不是单个资源具有try / catch块,然后调用某种方法来清理将要发送回客户端的所有异常。这有可能吗?如果是这样,怎么办? 而是在哪里向Jersey Servlet抛出某种Jersey配置的异常: 具有: 异常会被抛出到我可以拦截并从那里调用的东西。 实际上,这仅仅是为了简化Jersey的

    • 问题内容: 有没有一种方法可以在Java中创建全局异常处理程序。我想这样使用: 处理程序可能无法捕获在主体中引发的异常。 马丁 问题答案: 使用Thread.setDefaultUncaughtExceptionHandler。有关示例,请参见Rod Hilton的“ Global Exception Handling ”博客文章。

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