Java HttpServlet发送POST请求遇400 Bad Request问题求助
解决Java POST请求返回400 Bad Request的问题
针对你的代码,导致400错误的常见原因及修复方案如下:
1. 缺少Content-Type请求头
Postman发送JSON请求时会自动添加Content-Type: application/json头,但你的Java代码没有设置这个关键头,服务器无法正确识别请求体格式,从而返回400错误。
修复:
在配置连接时添加请求头:
proxyConnection.setRequestMethod(method); proxyConnection.setDoInput(true); proxyConnection.setDoOutput(true); // 添加Content-Type头 proxyConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
2. 输出流未正确刷新/关闭
直接关闭输出流可能导致部分请求体数据未发送到服务器,建议使用try-with-resources自动管理流,确保数据完全写入并刷新:
修复:
JsonObject parent = new JsonObject(); parent.addProperty("client_id", "clientXXY"); parent.addProperty("client_secret", "jxx.2221122"); parent.addProperty("username", "API.PRODTEST"); parent.addProperty("password", "kkGGkkGGEEee1"); // 使用try-with-resources自动处理流 try (OutputStream os = proxyConnection.getOutputStream()) { byte[] requestBody = parent.toString().getBytes("UTF-8"); os.write(requestBody); os.flush(); // 确保数据全部发送 }
3. 连接调用时机问题
proxyConnection.connect()不需要显式调用,当你获取响应信息(如getResponseMessage())时,Java会自动完成连接和请求发送。显式调用可能导致请求流程异常,建议移除该行代码。
完整修改后的代码示例
// CONFIGURE CONNECTION proxyConnection.setRequestMethod(method); proxyConnection.setDoInput(true); proxyConnection.setDoOutput(true); proxyConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); JsonObject parent = new JsonObject(); parent.addProperty("client_id", "clientXXY"); parent.addProperty("client_secret", "jxx.2221122"); parent.addProperty("username", "API.PRODTEST"); parent.addProperty("password", "kkGGkkGGEEee1"); // 写入请求体 try (OutputStream os = proxyConnection.getOutputStream()) { byte[] requestBody = parent.toString().getBytes("UTF-8"); os.write(requestBody); os.flush(); } // 获取响应(自动触发请求发送) System.out.println("ret mess " + proxyConnection.getResponseMessage());
内容的提问来源于stack exchange,提问作者DavidDunham
相关产品推荐
相关产品推荐

