RESTful(Jersey)Web服务中的WebApplicationException v / s ExceptionMapper

时间:2017-08-29 17:24:56

标签: java rest exception-handling jersey

我正在学习REST Web服务。我需要澄清一下Jersey中处理自定义异常的问题。使用WebApplicationExceptionExceptionMapper,您可throw自定义Exception。我的问题是我们选择WebApplicationExceptionExceptionMapper的情况。它们之间有什么区别?

我已经完成了一些教程,我发现ExceptionMapper就像Generic一样。

@Provider
class MyWrapper implements ExceptionMapper<MyPojoClass>
{
}

另一个区别是,

由于@Provider Jersey将仅在默认情况下捕获此异常,如果还发生任何其他异常。

还有其他差异吗?

MyExceptionMapper.java

package com.katte.galaxe.exception;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;


public class MyExceptionMapper implements ExceptionMapper<MyCustomException>
{

@Override
public Response toResponse(MyCustomException errMsg) {
    ErrorMessage msg = new ErrorMessage(errMsg.getMessage(),1100);
    return Response.status(Status.NOT_FOUND)
            .type(MediaType.APPLICATION_XML)
            .entity(msg)
            .build();
}
}

MyWebApplicationException.java

package com.katte.galaxe.exception;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

public class MyWebApplicationException extends WebApplicationException{

private static final long serialVersionUID = -5788907118191114665L;

public MyWebApplicationException(ErrorMessage msg) {
    super(Response.status(Status.NOT_FOUND)
            .entity(msg)
            .type(MediaType.APPLICATION_XML)
            .build());
}
}

1 个答案:

答案 0 :(得分:1)

WebApplicationException和ExceptionMapper并不打算进行比较,因为它们用于不同的目的。相反,它们旨在一起用于更好的响应策略。

想象一下在提供请求时遇到异常的情况。假设您在访问数据库时遇到了SQLException。在这种情况下,可以使用ExceptionMapper将SQLException映射到适当的5xx响应,而不是将原始异常传播给最终用户。

  

<强> WebApplicationException

     

应用程序的运行时异常。

     

如果需要生成特定的HTTP错误响应,则资源方法,提供程序或StreamingOutput实现可能会抛出此异常。只有在提交响应之前抛出才有效。

     

<强> ExceptionMapper

     

将Java异常映射到Response的提供程序的合同。