gpt4 book ai didi

java - Cxf jaxrs :outFaultInterceptors unable to modify message

转载 作者:行者123 更新时间:2023-12-01 23:51:46 25 4
gpt4 key购买 nike

这是我的错误拦截器:

public class OutFaultInterceptor extends AbstractPhaseInterceptor<Message> {

public OutFaultInterceptor() {
super(Phase.SEND);
}

@Override
public void handleMessage(Message message) throws Fault
{
Fault fault = (Fault)message.getContent(Exception.class);
Throwable ex = fault.getCause();
Response response = JAXRSUtils.convertFaultToResponse(ex, message);
message.setContent(Response.class, response);
}
}

这是我的相关 cxf-config:

    <jaxrs:outFaultInterceptors>
<bean id="outfault" class="com.xxx.OutFaultInterceptor"/>
</jaxrs:outFaultInterceptors>

我可以毫无问题地进入handleMessage方法,但我无法修改消息。

目前它返回的是默认值:ns1:XMLFault blah blah...

我想要返回的是一个 Response 对象,它具有正确的 HTTP 响应代码和 json 正文(我在上面的响应变量中正确地包含了它)。

谢谢

最佳答案

如果您使用 JAX-RS,为什么不设置异常映射器,然后使用该映射器来处理响应。

一个简单的例子:

 @Provider
@Produces(MediaType.APPLICATION_JSON)
public class MyExceptionMapper implements
ExceptionMapper<MyException> {

@Override
public Response toResponse(MyException e) {
return Response.status(Status.NOT_FOUND).build();
}

}

然后您需要通过添加以下内容在 jaxrs 服务中注册提供程序:

<jaxrs:providers>
<bean class="com.blah.blah.blah.blah.MyExceptionMapper"/>
</jaxrs:providers>

在上下文中的服务器配置中。这样您就可以完全访问异常,并可以从中获得您想要的任何内容。

关于java - Cxf jaxrs :outFaultInterceptors unable to modify message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223762/

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