Java Jax RS(Jersey)上下文中WebApplicationException和WebServiceException之间的差异

Java Jax RS(Jersey)上下文中WebApplicationException和WebServiceException之间的差异,java,jakarta-ee,tomcat,exception-handling,jax-rs,Java,Jakarta Ee,Tomcat,Exception Handling,Jax Rs,我正在创建一个Jersey web服务,我发现自己使用了上述两种异常类型。WebServiceException的构造函数允许您传递字符串作为WebApplicationException允许传入HTTP状态代码的原因。包括构造函数的差异,拥有这两种异常类型的目的是什么 谢谢。WebApplicationException是一种停止执行REST资源并向客户端发送一些有意义信息的方法。对于我一直在做的事情,我将这个异常子类化,这样它就有了一个生成JSON作为错误消息发送给客户端的实现。如果出现错误

我正在创建一个Jersey web服务,我发现自己使用了上述两种异常类型。WebServiceException的构造函数允许您传递字符串作为WebApplicationException允许传入HTTP状态代码的原因。包括构造函数的差异,拥有这两种异常类型的目的是什么


谢谢。

WebApplicationException是一种停止执行REST资源并向客户端发送一些有意义信息的方法。对于我一直在做的事情,我将这个异常子类化,这样它就有了一个生成JSON作为错误消息发送给客户端的实现。如果出现错误情况,假设缺少文件,我可能会执行以下操作:

}catch(FileNotFoundException ex){
    throw new MyException(ex.getMessage());
在客户机上,这将产生如下结果:

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

WebServiceException是Jersey的根运行时异常,也就是说,它最常见的结果是资源崩溃并导致HTTP 500

所以简单的回答是,第一个例外是你可能抛出的,另一个例外是你希望永远不会抛出的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); .... }});

因此,如果我想对WebApplicationException执行类似的操作,比如返回json或xml响应,我会怎么做呢?@Blaskovicz在上面为您发布了一个示例。这是否完全回答了您的问题?此代码是否能够向客户端返回json格式的错误?WebServiceException与JAX-RS有什么关系?它在JAX-WS中使用!这会导致日志框架创建异常堆栈跟踪吗?