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
相关产品推荐
相关产品推荐

