【发布时间】: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] 它是static,and [C] 它是 not 对可变事物的引用。例如static final List<String> ITEMS = new ArrayList<String>();仍然不正确 - 数组列表不是不可变的。static final List<String> ITEMS = List.of("A", "B")是合适的 -List.of返回不可变列表。你需要全部 3 个。 -
检查 'wire' - 但这是我的猜测:鉴于命名是全大写的,retrofit 认为它是一个常量,因此不会发送它。发送恒定信息有什么可能的意义? (请参阅我之前解释什么是常量的评论。它不仅仅是标记为
final的东西 - 它的值本质上是在编译时已知的),因此它根本不发送它。 -
将 Retrofit 与 GSON 序列化适配器一起使用,然后使您的对象成为 GSON 对象。这几乎是 Android 行业的标准。
标签: java android list api serialization