使用Camel REST调用外部API正常但无响应仅返回200 OK问题
问题原因
你遇到的问题核心是路由调用链路不匹配,Camel REST入口路由没有正确对接处理外部API调用的业务路由,导致没有可返回的响应内容,只能返回默认的空响应+200状态码。
具体修改方案
第一步:修正路由ID匹配关系
你当前REST路由配置的调用目标是direct:validator,但实际执行JSON校验、外部API调用的路由入口是direct:echoServiceUrl,两边名称完全不一致,导致调用链路中断,REST路由拿不到业务处理结果。
你可以二选一修改:- 把REST路由中的
to("direct:validator")修改为to("direct:echoServiceUrl") - 把业务路由的
from("direct:echoServiceUrl")修改为from("direct:validator")
- 把REST路由中的
第二步(可选优化):补充响应头配置
为了避免客户端识别响应格式异常,可以在业务路由末尾添加Content-Type设置,适配外部API返回的JSON格式:
.setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
修正后的完整代码示例
public class Validator extends RouteBuilder { private static final String REST_ENDPOINT_ECHO= "{{rest.endpoint}}?bridgeEndpoint=true" + "©Headers=true" + "&connectionClose=true"; @Override public void configure() throws Exception { onException(JsonValidationException.class) .handled(true) .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(400)) .setHeader(Exchange.CONTENT_TYPE, simple("text/plain")) .log("Body: ${body}, Header: ${headers}") .setBody(simple("Error: Invalid JSON Schema")); rest() .post("/{{rest.endpoint.subpath}}").enableCORS(true).route() // 修正路由调用目标,和下方业务路由入口对应 .to("direct:echoServiceUrl") // 可选:添加出口日志,确认返回内容 .log("Return to client: ${body}") .endRest(); from("direct:echoServiceUrl") .to("json-validator:file:/deployments/schema.json") .to("http://" + REST_ENDPOINT_ECHO) .log("HTTP Response: " + "${body}") .convertBodyTo(String.class) // 可选:设置正确的JSON响应头 .setHeader(Exchange.CONTENT_TYPE, constant("application/json")) .end(); } }
修改完成后重启应用,再用curl调用就能拿到外部API返回的JSON内容了。
内容的提问来源于stack exchange,提问作者RLam
相关产品推荐
相关产品推荐

