在泽西岛环球异常处理(Global Exception Handling in Jersey)

2019-07-29 19:25发布

有没有办法产生全球性的异常处理泽西? 而不是try / catch块,然后调用一些方法,然后进行消毒所有的异常将被发送回客户端个人资源,我希望有把这个地方的资源实际上是被称为一种方式。 这甚至可能吗? 如果是这样,怎么样?

相反的,其中sanitize(e)将抛出某种新泽西配置例外球衣的servlet:

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

有:

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

其中的例外是抛出的东西,我可以拦截并调用sanitize(e)从那里。

这真的只是为了简化所有泽西资源,并保证会返回给客户端的例外总是在某种可以理解的形式。

Answer 1:

是。 JAX-RS具有ExceptionMappers的概念。 你可以创建自己的ExceptionMapper接口映射任何异常的响应。 欲了解更多信息请参阅: https://jersey.github.io/documentation/latest/representations.html#d0e6352



Answer 2:

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();
  }
}


文章来源: Global Exception Handling in Jersey
标签: java rest jersey