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

Retrofit Post请求发送时出现斜杠转义问题求助

解决Retrofit Post请求JSON字符串自动转义的问题

兄弟,我太懂你被这个斜杠转义坑折腾的感受了!你遇到的问题本质是Retrofit默认会把普通String参数当成文本处理,自动给JSON里的双引号加转义斜杠,而不是把它当作原生JSON请求体发送。手动替换斜杠没用,因为Retrofit在序列化环节还会再次转义,得从根源上解决:

最规范的解决方案:直接传JSON对象/数组,别转String

Retrofit本身支持直接把JsonArray/JsonObject或者自定义实体类作为请求体参数,它会自动帮你序列化成正确的JSON,完全不会出现转义问题。

步骤1:修改Retrofit接口定义

用@Body注解接收JsonArray(如果需要把所有参数打包成一个JSON对象,就用JsonObject):

@POST("你的接口地址")
Call<你的响应实体类> addFavourite(
    @Query("restaurant_id") String restaurantId,
    @Query("restaurant_name") String restaurantName,
    @Body JsonArray restaurantInfo
);

步骤2:调用接口时直接传原对象

不用再转String,直接把Restaurant_info传进去就行:

private void favouriteadding(String restaurant_id, String restaurant_name, JsonArray Restaurant_info) {
    // 直接调用接口,传入原始的JsonArray
    yourRetrofitApi.addFavourite(restaurant_id, restaurant_name, Restaurant_info)
        .enqueue(new Callback<你的响应实体类>() {
            // 回调逻辑...
        });
}

如果必须传String类型的JSON(特殊场景)

要是接口要求必须传String格式的JSON,那你得告诉Retrofit:这个String是原生JSON,不是普通文本。

步骤1:修改接口,指定Content-Type并使用@Body

@POST("你的接口地址")
@Headers("Content-Type: application/json") // 关键:告诉服务器这是JSON格式
Call<你的响应实体类> addFavourite(@Body String requestBody);

步骤2:把所有参数整合成一个完整的JSON字符串

别分开传参数,把restaurant_id、restaurant_name和Restaurant_info打包成一个完整的JsonObject再转String:

private void favouriteadding(String restaurant_id, String restaurant_name, JsonArray Restaurant_info) {
    // 构造完整的请求JSON对象
    JsonObject requestJson = new JsonObject();
    requestJson.addProperty("restaurant_id", restaurant_id);
    requestJson.addProperty("restaurant_name", restaurant_name);
    requestJson.add("Restaurant_info", Restaurant_info);
    
    // 转成String后直接作为@Body参数发送
    String requestBody = requestJson.toString();
    yourRetrofitApi.addFavourite(requestBody)
        .enqueue(new Callback<你的响应实体类>() {
            // 回调逻辑...
        });
}

为什么手动替换斜杠没用?

你之前把Restaurant_info.toString()的斜杠替换掉,但Retrofit在处理普通String参数时,会默认把它当成表单字段的文本值,再次给双引号加上转义斜杠——相当于你前脚去掉,它后脚又加上,完全没用。只有让Retrofit识别这是JSON请求体,才会跳过不必要的转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:58:03