我正在创建Jersey网络服务,并且发现自己使用了上述两种异常类型。WebServiceException的构造函数允许您传递String作为WebApplicationException允许传递HTTP状态代码的原因。包括构造函数的区别,拥有这两种异常类型的目的是什么?
谢谢。
WebApplicationException是一种可以停止执行REST资源并将一些有意义的信息发送到客户端的方法。对于我一直在做的事情,我将此异常细分为子类,以便它具有将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的根运行时异常,即,它最常见是资源崩溃导致的结果,并导致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); .... }});