0

在 Apache Camel 项目中使用Restlet 组件,我无法在onException.

考虑一个这样配置的骆驼RouteBuilder

onException(Exception.class)
  .handled(true)
  .process(new FailureResponseProcessor());

from("restlet:http://example.com/foo")
  .process(fooProcessor)
  .to("file:data/outbox");

FailureResponseProcessor我尝试为 Restlet 设置 HTTP 响应代码:

public void process(Exchange exchange) throws Exception {
  Response response = exchange.getIn()
                              .getHeader(RestletConstants.RESTLET_RESPONSE,
                                         Response.class);
    response.setStatus(Status.SERVER_ERROR_INTERNAL);
}

这不起作用。HTTP 响应的状态始终为200 OK

有效设置 HTTP 状态码需要什么?

4

2 回答 2

1

在这里,您只是检索响应对象并对其进行更改。这不会沿路线传播。修改对象后需要设置表头。

exchange.getIn().setHeader(RestletConstants.RESTLET_RESPONSE, response);

谢谢。

于 2013-06-11T04:27:42.173 回答
1

您可以通过设置强制异常的状态代码

.onException(MyException.class).process(SetFailureResponse::new).handled(true)

并在一个单独的 SetFailureResponse 类集中

@Override
    public void process(Exchange exchange) throws Exception {
        exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE,400);
    }
于 2021-04-06T21:02:26.460 回答