【问题标题】:Do capital letters in variables make a difference in Serialization?变量中的大写字母对序列化有影响吗?
【发布时间】:2022-01-09 23:26:12
【问题描述】:

我发现(很难)我的 Android Java 代码中所有大写字母的变量没有被序列化为字节并通过 Rest Api 发送到我的 Java 后端服务器。

当客户端和服务器都使用**ABC**作为变量名时,服务器会收到这个变量的空值。

当客户端和服务器都使用**abc**作为小写变量时,它会正确序列化,服务器会收到正确的响应。

为什么会这样,因为如果我使用 Final 值,那么它们无论如何都会大写?

变量是这样的:

List<Object> OBJ;

如果变量是 List 有关系吗?

【问题讨论】:

  • 你能提供你用来序列化数据并将数据发送到后端的库吗?
  • 我使用 java.io 转换为字节数组,然后 Retrofit 从 Android 发送 API JSON,然后是 Spring 启动服务器端。一切都很通用。
  • ALL_CAPS_LIKE_THIS 中写入变量适用于常量final 不代表恒定ALL_CAPS 是合适的,如果 [A] 它是最终的,and [B] 它是 staticand [C] 它是 not 对可变事物的引用。例如static final List&lt;String&gt; ITEMS = new ArrayList&lt;String&gt;(); 仍然不正确 - 数组列表不是不可变的。 static final List&lt;String&gt; ITEMS = List.of("A", "B") 是合适的 - List.of 返回不可变列表。你需要全部 3 个。
  • 检查 'wire' - 但这是我的猜测:鉴于命名是全大写的,retrofit 认为它是一个常量,因此不会发送它。发送恒定信息有什么可能的意义? (请参阅我之前解释什么是常量的评论。它不仅仅是标记为 final 的东西 - 它的值本质上是在编译时已知的),因此它根本不发送它。
  • 将 Retrofit 与 GSON 序列化适配器一起使用,然后使您的对象成为 GSON 对象。这几乎是 Android 行业的标准。

标签: java android list api serialization


【解决方案1】:

您可以使用GSON 进行序列化,并在@SerializedName("api_name") 中提供api 预期的变量名称,并以任何您想要的方式保留变量的实际名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2021-09-07
    • 2019-07-23
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多