有一个包含多个可能的 Rest-responces 的 rest-route(它们是不同的类型,但我们假设它只是 MyResponse.class)。
rest().post("/{{camel.rest.version}}/myjson")
.consumes("application/json").produces("application/json")
.type(SampleRequest.class)
.responseMessage().code("200").responseModel(MyResponse.class).endResponseMessage()
.responseMessage().code("400").responseModel(MyResponse.class).endResponseMessage()
.responseMessage().code("500").responseModel(MyResponse.class).endResponseMessage()
.route().routeId("rest_myroute")
.log(LoggingLevel.INFO, "API_REQ Recieved http request ${body}")
.process(sampleProcessor).id("sample_transform")
.log(LoggingLevel.INFO, "API_RESP Response ${body}")
.endRest();
处理器执行一些验证/业务逻辑。大致看起来像:
@Override
public void process(Exchange exchange) throws Exception {
SampleRequest inReq = exchange.getIn().getBody(SampleRequest.class);
if (inReq.getMsgMode().equals("500"))
exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, HttpStatus.SC_INTERNAL_SERVER_ERROR);
if (inReq.getMsgMode().equals("400"))
exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, HttpStatus.SC_BAD_REQUEST);
MyResponse myClass = new MyResponse();
myClass.setRecId("123456");
exchange.getOut().setBody(myClass);
}
正例的执行结果:
代码详细信息 200 响应正文 { "recId": "123456" }
500 或 400 案例代码详细信息 400 错误:错误的请求响应标头连接:保持活动状态
(没有人)
如果我将路线更改为手动编组:
rest().post("/{{camel.rest.version}}/myjson")
.consumes("application/json").produces("application/json")
.type(SampleRequest.class)
.route().routeId("rest_myroute")
.log(LoggingLevel.INFO, LoggingConst.API_REQ+" Recieved http request ${body}")
.process(sampleProcessor).id("sample_transform")
.marshal().json(JsonLibrary.Jackson)
.log(LoggingLevel.INFO, LoggingConst.API_RESP+" Response ${body}")
.endRest();
结果是一样的。
行。以防万一使用 getOut() 不好,让我们试试 getIn()。使用 getIn() 的处理器
慕尼黑8549860
相关分类