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

使用Java调用Whatsapp Gateway发送消息返回500错误如何解决

问题排查与修复方案

你遇到的500错误核心是请求格式错误导致网关服务端解析失败,以下是所有问题点与修复方案:

问题清单

  • 非法JSON请求体:你构造的payload完全不符合JSON语法规范,键、字符串值没有加双引号,键值对用了错误的|分隔,也没有闭合大括号,网关解析JSON直接抛出异常返回500
  • 响应读取逻辑空指针:InputStreamReader Writing被初始化为null后直接传入BufferedReader,代码执行到此处直接触发空指针异常进入catch块
  • 未适配错误响应读取逻辑:返回4xx/5xx状态码时,HttpURLConnection需要从getErrorStream而非默认的getInputStream读取响应内容,否则也会抛出IO异常
  • 号码格式可能不符合要求:绝大多数WhatsApp网关要求号码携带国家码前缀,不能以0开头,比如你示例中的印尼号码需要修改为6281275704515

修复后代码

import java.net.*;
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class JsonExample1 {
        // 您的网关业务ID
        private static final String ID_CLIENT = "替换为你真实的业务ID";
        // 您的网关令牌
        private static final String CLIENT_SECRET = "替换为你真实的令牌";
        // 网关URL
        private static final String URL_GATEWAY = "替换为你真实的网关地址"; 
        // 主方法
        public static void main(String[] args) throws Exception {
            // Whatsapp号码 注意携带国家码,不要带+号、空格、横杠
            String number = "6281275704515";  
            // Whatsapp消息内容
            String message = "Test WhatsApp message"; 
            sendwhatsapp(number, message);
        }

    public static void sendwhatsapp(String number, String message) {
        // 构造合法JSON,注意键名如果网关要求大写就改成Number、Message
        String payload = String.format("{\"number\":\"%s\",\"message\":\"%s\"}", number, message);
        // 调试可以先打印payload确认格式
        System.out.println("请求体:" + payload);
        try {
            URL url = new URL(URL_GATEWAY);
            HttpURLConnection conex = (HttpURLConnection) url.openConnection();
            configPostRequest(conex);
            try(OutputStream output = conex.getOutputStream()){
                output.write(payload.getBytes(StandardCharsets.UTF_8));
                output.flush();
            }
            int stateCode = conex.getResponseCode();
            System.out.println("请求状态码:" + stateCode);
            // 适配正常/错误响应读取
            try(InputStreamReader reader = new InputStreamReader(
                    stateCode >= 200 && stateCode < 300 ? conex.getInputStream() : conex.getErrorStream(),
                    StandardCharsets.UTF_8);
                BufferedReader br = new BufferedReader(reader)){
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    response.append(line);
                }
                System.out.println("网关响应内容:" + response);
            }
            conex.disconnect();
        } catch (Exception e) {
            System.out.println("消息发送失败,错误信息:");
            e.printStackTrace();
        }
    }
    public static void configPostRequest(HttpURLConnection conex) throws ProtocolException {
        conex.setDoOutput(true);
        conex.setRequestMethod("POST");
        conex.setRequestProperty("ID", ID_CLIENT);
        conex.setRequestProperty("CLIENT_SECRET", CLIENT_SECRET);
        conex.setRequestProperty("Content-Type", "application/json; charset=utf-8");
    } 
}

补充排查建议

如果修改后还是返回错误,可以先将打印出的请求体、请求头复制到接口调试工具直接调用网关,确认参数名、鉴权信息、网关地址是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:54:02