2

我有一个基于 cxf 和骆驼的宁静的网络服务。我正在为我的工作流程使用骆驼路由,它是这样的..

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对象,但我如何访问此响应对象。

我尝试了以下方法,但没有解决我的问题。

  1. exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);

  2. exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);

  3. exchange.setProperty(Exchange.HTTP_RESPONSE_CODE, 202);

  4. Response.status(202).build();

4

3 回答 3

3

这是一种解决方法,我不知道这是否是唯一的方法,但这对我有用。将您的方法 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;
    }
}
于 2012-05-03T07:21:15.743 回答
3

设置后,HTTP_RESPONSE_CODE您需要告诉交易所发生了错误。

exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);
exchange.getOut().setFault(true);
于 2016-08-24T08:00:57.833 回答
2

你有没有在你的路线上累过这样的事情

Response r = Response.status(202).entity("Created").build();
exchange.getOut().setBody(r);

由于您想更改默认响应,因此您需要覆盖交换出去的消息

于 2012-05-03T06:56:00.643 回答