我对 Java 序列化还很陌生,在阅读它时我收集了几个问题。
假设您想要反序列化一个 json 响应,并且该 json 响应有一堆字段(例如 - a、b、c、d、e、f、g、h),但您只需要 a、b、c。您尝试访问的 api 已分页,因此您可以循环遍历它们。您还声明一个元数据类,例如 Sample.java ,这样只包含您想要的字段:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Sample {
private String a;
private String b;
private String c;
}
假设您的服务类别执行此操作:
UriComponentsBuilder createBranchUri = UriComponentsBuilder.fromUriString(requestUrl);
try {
Gson gson = new Gson();
Type sampleListType = new TypeToken<List<Sample>>() {}.getType();
//loop through the pages and make requests JsonArray sampleLines = paginatedRequest(restTemplate, createBranchUri, "values");
List<Sample> stashLines = gson.fromJson(sampleLines, sampleListType);
..........
这是允许的吗?这意味着它会处理序列化而不会出错并正确分配字符串 a、b 和 c 的值吗?或者我们只能通过使用此处描述的排除策略或直接索引到 json 对象来“排除”字段。换句话说 - 当 gson 解析响应时(在本例中:d,e ...),并且它在类型中找不到等效变量时,默认行为是什么? 另外,顺序重要吗?假设映射的顺序是a、b、c、d...... 如果我们交换 Sample 中 a 和 b 的位置会发生什么?