捕获所有异常并在Jersey中返回自定义错误

多米尼克

我想在球衣休息服务中捕获所有意外的异常。因此我写了一个ExceptionMapper:

@Provider
public class ExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<Exception> {
    private static Logger logger = LogManager.getLogManager().getLogger(ExceptionMapper.class.getName());

    @Override
    public Response toResponse(Exception e) {
        logger.log(Level.SEVERE, e.getMessage(), e);

        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Internal error").type("text/plain").build();
    }
}

映射器实际上捕获了所有异常。因此,我不能写:

public MyResult getById(@PathParam("id")) {
    if (checkAnyThing) {
        return new MyResult();
    }
    else {
        throw new WebApplicationException(Response.Status.NOT_FOUND);
    }
}

这是由映射器捕获的。现在我要写:

public Response getById(@PathParam("id") {
    if (checkAnyThing) { {
        return Response.ok().entity(new MyResult()).build();
    }
    else {
        return Response.status(Response.Status.NOT_FOUND).build();
    }
}

这是捕获所有意外异常并还返回球衣中的错误(错误代码)的正确方法吗?还是还有其他(更正确的)方法?

保罗·萨姆索塔

WebApplicationException有一个getResponse我们可以从中得到的Response因此,您可以WebApplicationException在映射器中检查也许像

@Override
public Response toResponse(Throwable error) {
    Response response;
    if (error instanceof WebApplicationException) {
        WebApplicationException webEx = (WebApplicationException)error;
        response = webEx.getResponse();
    } else {
        response = Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                .entity("Internal error").type("text/plain").build();
    }
    return response;
}

这样,WebApplicationExceptionthrown的实例将只返回默认响应。实际上,这还将处理其他一些异常,而不是由您的应用程序明确抛出。WebApplicationExceptionJAX-RS在其层次结构下具有其他一些异常,为此包装了预定义的响应/状态代码。

Exception                      Status code    Description
-------------------------------------------------------------------------------
BadRequestException            400            Malformed message
NotAuthorizedException         401            Authentication failure
ForbiddenException             403            Not permitted to access
NotFoundException              404            Couldn’t find resource
NotAllowedException            405            HTTP method not supported
NotAcceptableException         406            Client media type requested 
                                                            not supported
NotSupportedException          415            Client posted media type 
                                                            not supported
InternalServerErrorException   500            General server error
ServiceUnavailableException    503            Server is temporarily unavailable 
                                                            or busy

话虽如此,我们可以在我们的代码中显式地抛出任何这些异常,只是为了赋予它更多的语义价值。

但是,通常来说,上面的示例可能是不必要的,除非您想要更改响应消息/状态代码(如上表所示),异常的层次结构已经具有一些常规映射。在大多数情况下,意外的异常将已经映射到InternalServerErrorException

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何捕获WCF中的所有异常但包括自定义数据?

来自分类Dev

如何查看C#中的自定义类成员抛出的所有异常的列表?

来自分类Dev

在 Unity 中捕获所有异常

来自分类Dev

捕获类中的所有异常

来自分类Dev

如何将所有异常记录到 nest.js 中的自定义记录器?

来自分类Dev

捕获异常并返回自定义消息

来自分类Dev

什么是正确的错误类,可用于捕获pyxb中CreateFromDocument的所有异常

来自分类Dev

如何捕获Web API 2中的所有异常?

来自分类Dev

如何捕获PL / SQL脚本中的所有异常?

来自分类Dev

捕获Javascript类方法中的所有异常

来自分类Dev

从 Android 中的线程捕获所有异常

来自分类Dev

在js中捕获自定义异常

来自分类Dev

Scala:静默捕获所有异常

来自分类Dev

Java线程捕获所有异常?

来自分类Dev

jQuery Ajax 承诺:抛出自定义异常并在外部失败()中捕获它

来自分类Dev

在Java中进行错误处理时,应该捕获异常以捕获所有异常还是单独捕获异常?

来自分类Dev

NancyFX-在未捕获的异常上返回自定义错误响应

来自分类Dev

如何使用Apache Thrift在单个catch语句中捕获所有自定义异常?

来自分类Dev

如何使用Apache Thrift在单个catch语句中捕获所有自定义异常?

来自分类Dev

捕获异常并显示自定义错误页面

来自分类Dev

自定义错误页面的Sinatra捕获异常

来自分类Dev

在 Apache Spark 中捕获自定义异常

来自分类Dev

Laravel - 在自定义处理程序中捕获异常

来自分类Dev

Java 中的自定义异常尝试抛出捕获

来自分类Dev

捕获 404 错误 spring boot 以返回自定义 html

来自分类Dev

重定向返回错误并在自定义请求类中输入:Laravel 5

来自分类Dev

在自定义类上调用服务会在Symfony中返回可捕获的致命错误

来自分类Dev

捕获服务结构ReceiveReminderAsync中未处理的所有异常的正确方法是什么

来自分类Dev

拦截C#中的所有异常,即使它们已经被捕获

Related 相关文章

  1. 1

    如何捕获WCF中的所有异常但包括自定义数据?

  2. 2

    如何查看C#中的自定义类成员抛出的所有异常的列表?

  3. 3

    在 Unity 中捕获所有异常

  4. 4

    捕获类中的所有异常

  5. 5

    如何将所有异常记录到 nest.js 中的自定义记录器?

  6. 6

    捕获异常并返回自定义消息

  7. 7

    什么是正确的错误类,可用于捕获pyxb中CreateFromDocument的所有异常

  8. 8

    如何捕获Web API 2中的所有异常?

  9. 9

    如何捕获PL / SQL脚本中的所有异常?

  10. 10

    捕获Javascript类方法中的所有异常

  11. 11

    从 Android 中的线程捕获所有异常

  12. 12

    在js中捕获自定义异常

  13. 13

    Scala:静默捕获所有异常

  14. 14

    Java线程捕获所有异常?

  15. 15

    jQuery Ajax 承诺:抛出自定义异常并在外部失败()中捕获它

  16. 16

    在Java中进行错误处理时,应该捕获异常以捕获所有异常还是单独捕获异常?

  17. 17

    NancyFX-在未捕获的异常上返回自定义错误响应

  18. 18

    如何使用Apache Thrift在单个catch语句中捕获所有自定义异常?

  19. 19

    如何使用Apache Thrift在单个catch语句中捕获所有自定义异常?

  20. 20

    捕获异常并显示自定义错误页面

  21. 21

    自定义错误页面的Sinatra捕获异常

  22. 22

    在 Apache Spark 中捕获自定义异常

  23. 23

    Laravel - 在自定义处理程序中捕获异常

  24. 24

    Java 中的自定义异常尝试抛出捕获

  25. 25

    捕获 404 错误 spring boot 以返回自定义 html

  26. 26

    重定向返回错误并在自定义请求类中输入:Laravel 5

  27. 27

    在自定义类上调用服务会在Symfony中返回可捕获的致命错误

  28. 28

    捕获服务结构ReceiveReminderAsync中未处理的所有异常的正确方法是什么

  29. 29

    拦截C#中的所有异常,即使它们已经被捕获

热门标签

归档