当前位置: 首页 > 知识库问答 >
问题:

Apache Camel和CXF:如何从bean发送HTTP状态代码

巫马瀚漠
2023-03-14

我有一个基于cxf和camel的restful web服务。我正在为我的工作流程使用Camel routing,大概是这样..

客户-

豆子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.get(). sethead er(Exchange.HTTP_RESPONSE_CODE,202);

    exchange.get(). sethead er(Exchange.HTTP_RESPONSE_CODE,202);

    exchange.setProperty(Exchange.HTTP_RESPONSE_CODE, 202);

    <代码> Response.status(202)。build();

  • 共有3个答案

    越麒
    2023-03-14

    你在路上累了吗

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

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

    缪风史
    2023-03-14

    设置HTTP_RESPONSE_code后,需要告诉交换发生了错误。

    exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);
    exchange.getOut().setFault(true);
    
    凌嘉勋
    2023-03-14

    这里有一个解决方法,我不知道这是不是唯一的方法,但这对我来说很有效。将方法Foo的返回类型更改为响应(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;
        }
    }
    
     类似资料:
    • 我正在使用apache camel cxf开发一个Web服务(肥皂),我遇到了这个错误。 Java . lang . illegalargumentexception:Part { http://blue print . camel . ngt . TN/}返回的类型应为[ltn . ngt . camel . blue print . WB _ subscriptions;,而不是org . A

    • 问题内容: 我看到了一些类似的问题(像这样),但是没有一个问题专门解决这个问题。 因此,Google 现在支持SPA,并且大多数网络浏览器都支持HTML5 pushState 。 我的AngularJS(但可能是任何JS东西)网站都使用URL来确定API路由。然后执行API调用,然后相应地呈现内容。 但是,由于 每个URL都 返回HTTP 200状态代码(包括example.com/get-fre

    • 我们在前端使用OpenWeb js库,它们需要.NET中间层在发生某些类型的错误时向它们发送特定的HTTP头状态代码。我试图做到这一点: 它有点半途而废。看截图:http状态码 http://zerogravpro.com/temp/pic.png 请注意,我在响应标头中实现了状态码400,但我确实需要请求标头中的400。相反,我得到了“200 OK”。我如何实现这一点? 我用于进行调用的 URL

    • 问题内容: 有状态会话bean和HTTP会话之间有什么关系吗?我们将需要有状态会话Bean的用例是什么,而HTTP会话需要哪些用例。我可以将有状态会话Bean公开为静态Web服务吗? 问题答案: HTTP是一种无状态协议, 这意味着 它是服务器和客户端之间的实际传输协议- 是“无状态的, 因为它在调用之间不记得任何东西。 现在,首先阅读一下什么是HTTPSession和什么是Session Bea

    • 问题内容: 我有一个PHP脚本,需要使用HTTP响应代码(状态代码)进行响应,例如HTTP 200 OK,或一些4XX或5XX代码。 如何在PHP中做到这一点? 问题答案: 我刚刚发现了这个问题,并认为它需要一个更全面的答案: 从 PHP 5.4开始 ,有三种方法可以实现此目的: 自行组装响应代码(PHP> = 4.0) 该函数有一个特殊的用例,可以检测HTTP响应行,并让您用自定义行替换它 但是

    • 的方法,例如抛出。我想从catch块中的那个异常对象中提取HTTP状态代码和响应正文。我该怎么做?