gpt4 book ai didi

java - 通过 @WebFault 注释在 JAX-RS 中映射自定义异常

转载 作者:行者123 更新时间:2023-12-02 00:03:08 25 4
gpt4 key购买 nike

我正在使用 JAX-RS/Apache CXFJSON 开发客户端-服务器应用程序

我希望 Apache CXF 在两端透明地处理我的异常:这意味着将异常转换为 bean,使用我的 Jackson Serializer (JSON) 对其进行序列化,然后在客户端。

我看到了一些关于这个主题的令人困惑的帖子/答案,并想出了使用 @WebFault 注释:

@WebFault(name=CODE, faultBean="foo.bar.FaultBean")
public class DuplicateRuleNameFault extends Exception {
static final public String CODE = "DUPLICATE_RULE_NAME";
private FaultBean faultBean;

public DuplicateRuleNameFault(String msg) {
super(msg);
this.faultBean = new FaultBean(msg);
}
public DuplicateRuleNameFault() {
}
public FaultBean getFaultBean() {
return faultBean;
}
public void setFaultBean(FaultBean faultBean) {
this.faultBean = faultBean;
}
}

没有成功......目前,CXF 似乎很乐意忽略异常上的注释并将其作为未知异常处理:500 状态错误并且在服务器端没有生成响应正文。

我必须在 Spring 上下文的“”服务器元素中配置一些特定的内容吗?我已经让 Spring 扫描我的 Exception/FaultBean 类(顺便说一句,还需要它吗?)。

如果您能给我指出一些可行的示例,我将不胜感激。谢谢。

最佳答案

@WebFault 不是 JAX-RS 规范的一部分。您将需要阅读 section 3.3.4规范的一部分,它描述了完成您想要做的事情的不同方法。

选项 1

设计您的资源类以抛出 WebApplicationException's 。将这些异常的 response 属性设置为有效的 JAX-RS 响应,其中包含要发送到客户端的故障 bean。

选项 2

定义异常映射提供程序。您可以创建它们的层次结构来处理应用程序将引发的所有常见异常。或者,您可以使用嵌入式 bean 及其异常处理程序创建顶级异常。然后从顶级异常中派生出几个特定的​​异常。

public abstract class MyApplicationException<T> extends Exception {
private T faultBean;

// Constructors, setters/getters
}

@Provider
public class MyApplicationExceptionHandler implements ExceptionMapper<MyApplicationException<?>> {
// Implementation
}

关于java - 通过 @WebFault 注释在 JAX-RS 中映射自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com