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

Retrofit 2登录POST请求返回500错误但Postman可正常运行

Retrofit 2 POST登录返回500错误(Postman正常)的排查与解决

我帮你梳理几个大概率能解决问题的方向——毕竟Postman能跑通说明接口本身没问题,问题大概率出在Retrofit的请求配置和Postman不一致上:

1. 核对请求头是否完全匹配

Postman里的所有请求头(比如User-Agent、自定义标识头、甚至Cookie),都要确保Retrofit请求里也同步带上。很多服务器会因为缺失特定头返回500,你可以给OkHttpClient加个拦截器统一补全:

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request originalRequest = chain.request();
            Request modifiedRequest = originalRequest.newBuilder()
                .header("User-Agent", "你的App名称/版本")
                // 把Postman里的其他请求头都复制过来
                .build();
            return chain.proceed(modifiedRequest);
        }
    })
    .build();

2. 检查参数编码与格式细节

虽然你用了@FormUrlEncoded,但要确认:

  • 参数名_username和_password的大小写、下划线完全和接口文档一致,别漏了下划线
  • 如果参数值包含特殊字符(中文、空格、符号),确认Retrofit的编码方式和Postman一致。可以尝试手动对参数做URL编码后再传入

3. 打印完整请求日志对比Postman

给Retrofit加个日志拦截器,把请求的URL、头、参数全打出来,和Postman的请求逐行对比,差异点一找一个准:

// 先添加依赖:com.squareup.okhttp3:logging-interceptor
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(loggingInterceptor)
    .build();

然后看Logcat里的请求详情,和Postman的请求对比,就能发现哪里不一样。

4. 读取服务器返回的错误详情

在回调里打印errorBody的内容,服务器通常会在500错误里返回具体的报错原因:

call.enqueue(new Callback<JsonObject>() {
    @Override
    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
        if (!response.isSuccessful()) {
            try {
                // 打印服务器返回的错误信息
                String errorContent = response.errorBody().string();
                Log.e("LoginDebug", "服务器错误详情:" + errorContent);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return;
        }
        // 处理成功逻辑
    }

    @Override
    public void onFailure(Call<JsonObject> call, Throwable t) {
        t.printStackTrace();
    }
});

如果以上都排查完还是有问题,建议找后端同事看看服务器的500错误日志,能直接定位到是参数解析失败、权限校验问题还是其他逻辑报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:41:59