Jax-RS(Jersey)上下文中的WebApplicationException和WebServiceException之间的区别

我正在创建一个Jersey Web服务,我发现自己使用了两种提到的exception类型。 WebServiceException的构造函数允许您传递String作为WebApplicationException允许传入HTTP状态代码的原因。包括构造函数差异,具有这两种exception类型的目的是什么?

谢谢。

WebApplicationException是一种可以停止执行REST资源并向客户端发送一些有意义信息的方法。 对于我一直在做的事情,我将这个exception子类化,以便它有一个实现生成JSON作为客户端的错误消息。 如果出现错误情况,让我们说一个丢失的文件,我可能会这样做:

}catch(FileNotFoundException ex){ throw new MyException(ex.getMessage()); 

在客户端,这将产生类似于:

 { errorCode: 56, errorMessage: 'could not find file "input.txt"' }; 

http://download.oracle.com/javaee/6/api/javax/ws/rs/WebApplicationException.html

WebServiceException是Jersey的根运行时exception,即它最常见的原因是资源崩溃并导致HTTP 500。

http://download.oracle.com/javaee/5/api/javax/xml/ws/WebServiceException.html

所以简短的回答是第一个例外是你可能抛出的,另一个是你希望永远不会抛出的。 :P

一个例子:

 public class MyException extends WebApplicationException { public MyException(JSONObject jsonObject) { super(Response.status(Response.Status.OK) .entity(jsonObject) .type(MediaType.APPLICATION_JSON) .build()); } 

然后从代码中的任何位置停止执行并将错误信息发送给客户端执行以下操作:

 }catch(FileNotFoundException ex){ throw new MyException(new JSONObject(){{ this.put("errorCode", 4); .... }});