我有一个基于cxf和camel的restful web服务。我在我的工作流程中使用 Camel 路由,它是这样的..
Client --> My Rest Service Class --> Camel Custom Processors --> Bean Bar 的一些方法 Foo
Bean FooBar 看起来像这样..
public class Bar {
public MyObject foo(String request, Exchange exchange){
//do some procesing
return instance of MyObject;
}
现在的问题是,每当我测试这个时,我都会在客户端收到 200 的响应代码。现在,如果我希望此代码不是 200,我需要将其设置在 HttpServletResponse
或其他一些 javax.ws.rs.core.Response
对象中,但我该怎么做我访问这个响应对象。
我尝试了以下方法,但没有解决我的问题。
exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);
exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);
exchange.setProperty(Exchange.HTTP_RESPONSE_CODE, 202);
Response.status(202).build();
最佳答案
这是一个解决方法,我不知道这是否是唯一的方法,但这对我有用。将方法 Foo 的返回类型更改为 Response(javax.ws.rs.core) ,然后将您的对象(“myobject 的实例”)包装在此响应中,如果您想的话,您也可以指定 mime 类型..是一个样本..
public class Bar {
public Response foo(String request, Exchange exchange){
//make instance of MyObject
MyObject myObj = new myObj();
//do your processing and set the object in response code
Response response = Response.status(Status.ACCEPTED).entity(myObj).type(MediaType.APPLICATION_JSON).build();
return response;
}
}
关于java - Apache Camel 和 CXF : How do i send HTTP status code from bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10425955/