我编写了一个自定义拦截器来进行一些参数验证。我希望能够返回错误代码并将带有JAXB注释的类序列化为响应主体。
如果我抛出一个WebApplicationException,它没有做任何特殊处理来序列化内部的Response对象(这是有意义的;我认为这是由另一个拦截器完成的。)
我应该如何停止拦截器链但是仍然有JAXB序列化响应实体?
答案 0 :(得分:3)
好吧,至少在CXF JAX-RS拦截器流程中,如果设置:
message.getExchange().put(Response.class, response);
...然后实际服务不会被调用,而其他阶段会被调用。没有深入研究CXF代码,看看这个逻辑在哪里发挥作用。
所以我建立了这样的回复:
Response response = Response
.status(Response.Status.FORBIDDEN)
.entity(new ErrorEntity("This is a JAXB object with an error string"))
.build();
我还在CXF JAX-RS过滤器中运行了一些自定义身份验证,我只想在身份验证正常时检查参数,因此我将参数拦截器类设置为在PRE_INVOKE
阶段运行。 / p>