【发布时间】:2018-07-19 19:09:32
【问题描述】:
所以,我们在 java 中工作,被反序列化的对象的结构是这样的
@ApiModel(description = "Container for collection of Patient Search results")
public class PatientSearchResultListCMRefactor {
private final List<PatientSearchResultCMRefactor> patientSearchResults;
private final int totalSearchResults;
//getters, toString, etc
}
该对象中引用的对象如下
public final class PatientSearchResultCMRefactor {
private float score;
private String id;
private String firstName;
private String lastName;
private String setupDate;
private Optional<AddressCM> address;
private Optional<Boolean> active;
private Optional<String> dateOfBirth;
private Optional<String> email;
private Optional<String> patientExternalId;
private Optional<String> patientReference;
private Optional<String> phoneNumber;
private Optional<String> currentAverageDaysUsed;
private Optional<Double> currentAverageHoursUsed;
private Optional<PatientOrganizationCM> organization;
private Optional<PatientOrganizationCM> topOrganization;
private Optional<ImmutableSet<PatientClinicianCM>> clinicians;
private Optional<ImmutableSet<PatientLocationCMRefactor>> locations;
private Optional<ImmutableSet<PatientDeviceCM>> devices;
private Optional<String> matchesBy;
//setters, getters, left-handed smoke-shifters, constructors
}
反序列化的代码是
Gson gson = new Gson();
System.out.println(response.getBody());
String jsonTemp = response.getBody();
System.out.println(jsonTemp);
PatientSearchResultListCMRefactor resultListCM = gson.fromJson(jsonTemp, PatientSearchResultListCMRefactor.class);
被反序列化的完整字符串是
{
"patientSearchResults": [
{
"score": 0.7582117,
"id": "3910dc3d-913b-4862-aee5-4610d2c2981f",
"firstName": "Nelda",
"lastName": "Dixon 36",
"setupDate": "2018-07-19",
"address": {
"streetAddress": "0545 Route 202",
"city": "Joliet",
"stateProvince": "SC",
"zipCode": "87636",
"countryCode": "USA"
},
"active": true,
"dateOfBirth": "1971-01-16",
"email": "n_dixon_RRAwyqXKIp@example.com",
"patientExternalId": "6bc63dfa-1106-40c9-875a-a74368cf5189",
"patientReference": null,
"phoneNumber": "365-177-2753",
"currentAverageDaysUsed": null,
"currentAverageHoursUsed": null,
"organization": null,
"topOrganization": null,
"clinicians": [
],
"locations": null,
"devices": [
],
"matchesBy": null
}
],
"totalSearchResults": 17
}
错误是
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BOOLEAN at line 1 column 289
紧接在
之后"address": {
"streetAddress": "0545 Route 202",
"city": "Joliet",
"stateProvince": "SC",
"zipCode": "87636",
"countryCode": "USA"
},
"active": true,
在字符串中,“true”之后的逗号是第 289 列(为了澄清,行号和列号来自我对字符串进行漂亮打印之前)。我认为它需要一个新对象,但地址是嵌套在顶部对象中的子对象,并且子对象的深度永远不会超过 1 级,尽管根据 PatientSearchResultCMRefactor 模型有多个子对象。我是一名测试人员,这是一个 ReST API 调用的主体,所以我不能真正改变响应的格式。我所能做的就是尝试按原样解析它。有什么建议吗?
【问题讨论】:
-
"patientSearchResults": [ -
@dhke 你是对的,谢谢。不幸的是,这只是一个转录错误,我已经更正了。
-
您是否检查过
AddressCM的定义是否正确? -
@JoakimDanielson 是的,我检查了 PatientSearchResultCMRefactor 中引用的所有对象的正确性。使用适当的 setter 和 getter 计算所有变量。
-
我能想到的只有一件事:
setActive参数定义为boolean还是java.lang.Boolean?
标签: java json gson deserialization