You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OSB 12c调用带JSON请求体的GET REST服务问题求助

在OSB 12c中调用带JSON请求体的GET REST服务的可行方案

确实有开发者成功实现过这类调用,分享两个经过验证的方案,针对你遇到的问题逐一解决:

方案一:调整HTTP代理服务+管道配置

你的第二种方法方向没错,但细节没处理好导致408错误,调整如下:

  • 创建HTTP代理服务:
    传输类型选HTTP,内容类型直接设为application/json(别用text/plain,避免头信息不匹配),填入目标服务URL后,暂时将请求方法设为POST。
  • 管道内修正请求信息:
    1. 在请求管道添加Transport Header操作,把Request Method强制改成GET;
    2. 保留Content-Type: application/json头,必须手动添加Content-Length头,值为JSON请求体的字节长度(可通过XQuery计算:string-length($body),纯英文场景直接用字符串长度,含中文则需按UTF-8字节数换算);
    3. 禁用Transfer-Encoding: chunked头,多数服务不接受GET请求用分块传输,OSB默认可能自动添加该头,必须手动移除。
  • 请求体处理:管道中直接传递原始JSON请求体,不做额外转换,确保OSB不会自动丢弃请求体。

调整后可用抓包工具(如Wireshark)验证:请求方法为GET、头信息正确、请求体正常发送,即可解决之前的请求体为空和408问题。

方案二:Java Callout绕过OSB传输层限制

如果方案一仍有问题,可通过Java直接发起请求,完全绕过OSB对GET请求的默认限制:

  • 编写HTTP工具类:用HttpURLConnection构造带请求体的GET请求,示例代码:
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class GetWithBodySender {
        public static String send(String targetUrl, String jsonPayload) throws Exception {
            URL url = new URL(targetUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoOutput(true);
    
            // 写入JSON请求体
            try (OutputStream os = conn.getOutputStream()) {
                byte[] input = jsonPayload.getBytes("UTF-8");
                os.write(input, 0, input.length);
            }
    
            // 读取目标服务响应
            StringBuilder response = new StringBuilder();
            try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"))) {
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
            }
            return response.toString();
        }
    }
    
  • 部署并调用:将编译好的JAR包放入OSB域的lib目录,重启OSB服务;在管道中添加Java Callout操作,调用该类的send方法,传入目标URL和JSON请求体,最后将返回的字符串转换为OSB可处理的响应格式即可。

额外提醒

  • 检查OSB配置:部分版本会默认丢弃GET请求的请求体,需确保传输层无此类过滤规则;
  • 408错误排查:多为请求头不完整(如缺失Content-Length)或连接超时,抓包确认发送的请求是否符合目标服务要求;
  • 测试方式:不要仅依赖OSB测试控制台,用Postman或curl直接调用OSB代理服务,验证请求转发是否正常。

内容的提问来源于stack exchange,提问作者Dmytro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:23:31