【问题标题】:What is the right way to handle Strings when doing HTTP requests?进行 HTTP 请求时处理字符串的正确方法是什么?
【发布时间】:2016-07-07 06:32:49
【问题描述】:

我有一个 Android 应用程序作为后端服务器的客户端。

我在Retrofit lib的帮助下做一个POST http请求,正文中有一个字符串。

问题是,Retrofit 在使用 GSON builder 时很可能会转义双引号。

这会导致我的数据库中包含双引号的字段,例如:"example_gcm_token"

我需要知道我应该在服务器端还是在客户端处理它以及如何做到这一点。

我认为它不应该在服务器端,因为这意味着我必须删除每个端点的转义引号。

@POST ("/Maguss/users/{userId}/gcmtoken")
    Call<Void> setGcmToken(@Path("userId") Long userId, @Body StringEntity gcmToken);

【问题讨论】:

  • 所以返回的 json 实际上看起来像:{ "some key": "\"example_gcm_token\"" }?
  • 那么我不知道在客户端或后端剥离它的任何其他方式。我仍然认为这样的逻辑应该在后端,但这可能只是一个品味问题。我确实认为后端应该始终以某种方式成为事实的单一点,以及构建一切的地方。似乎引号甚至不应该在字符串中。

标签: android http retrofit


【解决方案1】:

我会尝试用 POJO 替换 StringEntity

public class SetGcmTokenRequest {
    @SerializedName("gcmtoken")
    private String gcmToken;

    public String getGcmToken() {
        return gcmToken;
    }

    public void setGcmToken(String gcmToken) {
        this.gcmToken = gcmToken;
    }
}

然后像这样改变界面:

@POST ("/Maguss/users/{userId}/gcmtoken")
Call<Void> setGcmToken(@Path("userId") Long userId, @Body SetGcmTokenRequest setGcmTokenRequest);

【讨论】:

  • 是的,这会解决它,虽然我不高兴我不能发送简单的字符串而不必处理引号:)
  • 我知道,但我认为不支持 StringEntity 作为主体。你可以使用 HashMap,但是你的 API 客户端会变成猜谜游戏 :)
猜你喜欢
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多