有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Cxf jaxrs:outFaultInterceptors无法修改消息

这是我的错误拦截器:

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配置:

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

我可以进入handleMessage方法没有问题,但是我不能修改消息

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

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

谢谢


共 (1) 个答案

  1. # 1 楼答案

    如果您使用的是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>
    

    在服务器配置的上下文中。有了它,您就可以完全访问异常,并且可以从中获得您想要的任何东西