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

使用PHP Slim构建Android REST API时Retrofit响应失败问题排查

Troubleshooting Retrofit onFailure When Receiving Response from Slim PHP API

看起来你已经搞定了数据写入MySQL的核心逻辑,但卡在了响应解析导致Retrofit触发onFailure——这在API开发里是很常见的细节问题,咱们一步步排查:

1. 最可能的原因:无效的JSON格式

你返回的{success:'yes'}不符合标准JSON语法!JSON要求字符串必须用双引号包裹,单引号是不被官方规范允许的。Retrofit的JSON转换器(比如Gson、Moshi)会因为这个格式错误直接抛出解析异常,进而触发onFailure。

修复方式:

把响应内容改成标准JSON:

$response->getBody()->write('{"success":"yes"}');

或者更省心的是用Slim框架自带的withJson方法,它会自动处理格式和Content-Type:

return $response->withJson(['success' => 'yes'], 200);

这个方法不仅能保证JSON格式绝对正确,还会自动设置Content-Type: application/json,不用手动写header,避免遗漏或写错。

2. 检查Slim响应的返回逻辑

确保你在PHP代码里正确返回了构建好的响应对象,而不是只写了Body却没返回。比如:

// 正确的写法示例
$app->post('/your-endpoint', function ($request, $response, $args) {
    // 写入MySQL的业务逻辑...
    
    // 必须return构建好的响应对象
    return $response->withJson(['success' => 'yes'], 200);
});

如果没有return这个响应对象,Slim可能会默认返回空响应或者错误的状态码,导致Retrofit无法正常解析。

3. 排查Retrofit端的配置与模型类

  • 确保你的Retrofit实例添加了JSON转换器,比如Gson:
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .build();
  • 检查你的响应模型类是否和返回的JSON严格匹配,比如:
public class ApiResponse {
    private String success; // 字段名要和JSON里的"success"完全一致,大小写敏感

    public String getSuccess() {
        return success;
    }

    public void setSuccess(String success) {
        this.success = success;
    }
}

如果字段名不匹配,或者缺少getter/setter,也可能导致解析失败触发onFailure。

4. 用调试工具确认响应内容

可以用Postman或者curl直接请求你的API端点,看看返回的响应是否符合预期:

curl -X POST http://your-api-url/your-endpoint -d "your-post-data"

重点检查响应的状态码(应该是200 OK)和响应体是否是标准JSON。如果这里返回的内容有问题,那问题肯定在PHP端;如果这里是正常的,再去排查Retrofit的配置细节。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:54