使用Camel+Spring Boot发起GET请求返回406,Postman请求正常求助
解决Camel HTTP4请求返回406 Not Acceptable的问题
你遇到的406状态码问题,本质是服务器无法返回符合请求中Accept头要求的内容格式。Postman能正常拿到200和JSON响应,是因为它默认会发送合适的Accept请求头(比如application/json或者*/*),但你的Camel路由里恰好缺少了这个关键配置。
核心修复步骤
- 添加
Accept请求头:明确告诉服务器你期望接收JSON格式的响应,这是解决406的关键。 - 优化HTTP4组件配置:开启
bridgeEndpoint参数,确保Camel完全使用你自定义的HTTP_URI配置,避免组件自动拼接地址导致的潜在问题。
修改后的完整路由代码
from(RouteUtils.buildSedaEndpointWithConcurrentConsumers("sedaEndpointin", domain.getThreads())) .routeId("routeiD") .setProperty("workerId").jsonpath("$.worker_id") .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET)) .setHeader(Exchange.HTTP_QUERY, simple(String.format("key=%s&barcode=${exchangeProperty.workerId}", apiKey))) .setHeader(Exchange.HTTP_URI, simple("https://" + endpoint)) .setHeader("Authorization", simple(Auth)) .setHeader(Exchange.ACCEPT, constant("application/json")) // 新增:指定接受JSON格式 .to("http4://" + Endpoint + "?bridgeEndpoint=true") // 开启bridgeEndpoint .to("sedaEndpoint");
额外说明
Content-Type头在GET请求中其实作用不大(因为GET通常没有请求体),如果你的接口不需要这个头,可以考虑移除它,避免混淆。- 如果添加
Accept头后还是有问题,可以尝试将Accept设置为*/*(接受任何格式),排查是否是服务器对特定格式的匹配逻辑问题。
内容的提问来源于stack exchange,提问作者Sparkler-blush
相关产品推荐
相关产品推荐

