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

调用Mojang认证接口遇400错误及JsonMappingException问题排查

解决Mojang认证服务器400 Bad Request(JsonMappingException)问题

看起来你遇到的核心问题是服务器无法正确解析你的JSON请求体,从错误信息里能看到,它把整个JSON字符串当成了一个单一的字符串值来尝试反序列化到CaptchaCredentials类,这明显不对——说明你的请求在传输过程中格式或者编码出了问题。

问题根源

你的代码里创建StringEntity的时候没有指定编码格式,默认情况下StringEntity会使用ISO-8859-1编码,而JSON规范要求用UTF-8编码。这种编码不匹配会导致服务器无法正确解析请求体,最终抛出JsonMappingException。

解决方案

修改StringEntity的创建代码,明确指定UTF-8编码,同时在请求头里也明确字符集:

import java.nio.charset.StandardCharsets;
import org.apache.http.util.EntityUtils;

// ... 你的其他代码 ...

Gson gson = new Gson();
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(server);

// 关键修改:指定UTF-8编码创建StringEntity
StringEntity postingString = new StringEntity(gson.toJson(payload), StandardCharsets.UTF_8);
post.setEntity(postingString);

// 在Content-Type头里明确指定字符集,避免服务器误解
post.setHeader("Content-Type", "application/json; charset=UTF-8");

HttpResponse response = httpClient.execute(post);
// 改用EntityUtils.toString来正确获取响应内容,原response.toString()只能拿到代理对象的描述
this.authResponse = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);

额外调试建议

  • 打印实际发送的JSON内容:在创建StringEntity之前,输出gson.toJson(payload),确认它的格式和你预期的完全一致,没有语法错误(比如多余的逗号、缺失的括号)。
  • 用Postman/curl手动验证请求:把你生成的JSON作为请求体,发送POST到目标地址,看看是否能正常响应。如果手动请求没问题,那问题肯定出在代码的请求构建逻辑上。
  • 注意API限制:Mojang的旧用户名密码认证API可能会触发验证码机制,如果你修改编码后仍然报错,要检查响应内容里是否包含验证码相关的要求,需要额外处理验证码流程。

关于之前的Method Not Allowed错误

这个应该是你最初测试时的请求方式错误导致的,现在你使用HttpPost是符合API要求的,只要请求格式正确就不会再出现这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:10