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

Bla*_*icz 14 java tomcat exception-handling jax-rs java-ee

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

谢谢.

Gun*_*man 23

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

}catch(FileNotFoundException ex){
    throw new MyException(ex.getMessage());
Run Code Online (Sandbox Code Playgroud)

在客户端,这将产生如下内容:

{ errorCode: 56, errorMessage: 'could not find file "input.txt"' };
Run Code Online (Sandbox Code Playgroud)

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

WebServiceException是Jersey的根运行时异常,即它最常导致资源崩溃并导致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());
}
Run Code Online (Sandbox Code Playgroud)

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

}catch(FileNotFoundException ex){
    throw new MyException(new JSONObject(){{ this.put("errorCode", 4); .... }});
Run Code Online (Sandbox Code Playgroud)