gpt4 book ai didi

java - 用于抛出客户端特定异常的 JAX RS CXF 拦截器

转载 作者:行者123 更新时间:2023-12-01 15:07:57 25 4
gpt4 key购买 nike

我有一个服务器,将一组类公开为 RESTful 服务。我知道我们可以使用 ExceptionMapper用于将异常传递给客户端。客户端和服务器之间共享的检查异常很少。然而,在我的一些服务中,我有一些在客户端 JVM 中不可用的检查异常。

据我所知,更改端点以确保正确处理已检查的异常可以解决该问题。

但是,我想在拦截器层执行此操作,原因有两个:

  • 这将是我可以处理导致检查异常的所有调用的一个地方。
  • 由于当前的发布日期,这将是一项巨大的重构工作。

查看 CXF documentation ,我知道我必须扩展 AbstractPhaseInterceptor 并重写 handleMessage()

public class MyOutExceptionInterceptor extends AbstractPhaseInterceptor<Message> {

public AttachmentInInterceptor() {
//Which phase to call here ??
super(Phase.POST_INVOKE);
}

public void handleMessage(Message message) {

//Check from message that it contains an exception of MyCheckedException.class
//Create an exception that client can understand

}
}

我该怎么做?

提前致谢。

最佳答案

我知道我迟到了,但我也遇到了这个问题并提出了这个解决方案。所以供将来引用:

改为重写handleFault,在内部:

Exception fault = message.getContent(Exception.class);
Exception exception = fault.getCause();
YourOwnFault newFault = new YourOwnFault("bla bla bla");
message.setContent(Exception.class, newFault);

换句话说:提取故障,获取异常作为原因,创建新故障并插入 int。

关于java - 用于抛出客户端特定异常的 JAX RS CXF 拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12726776/

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