我正在使用GET API,作为回应,我得到一个对象数组,其中每个对象都有一个列表(电子邮件的ArrayList)。我可以访问除电子邮件列表之外的对象的所有值。我已尝试使用list,Array,String等...但我无法从Object中的List中访问电子邮件地址。
**请告诉我如何访问电子邮件列表?
我打印了attributeID,它为所有对象打印了attributeId,但我无法通过我的java代码访问电子邮件列表。如果我尝试,它会给我NullPointerException。
电子邮件列表大小:0电子邮件列表大小:0电子邮件列表大小:0电子邮件列表大小:0
我可以使用Postman获取整个对象列表,包括对象内的电子邮件列表。
[
{
"attributeId": 12345,
"attributeTitle": "Hello World",
"someNumber": null,
"totalAmount": 20,
"emailList": [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
]
},
{
"attributeId": 23456,
"attributeTitle": "Hello America",
"someNumber": null,
"totalAmount": 30,
"emailList": [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
]
},
{
"attributeId": 34567,
"attributeTitle": "Hello Texas",
"someNumber": null,
"totalAmount": 40,
"emailList": [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
]
},
{
"attributeId": 45678,
"attributeTitle": "Hello California",
"someNumber": null,
"totalAmount": 50,
"emailList": [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
]
}
]
enter code here
import java.util.ArrayList;
public class CmsObject {
private String attributeId;
private String attributeTitle;
private String someNumber;
private int totalAmount;
private ArrayList<String> emails = new ArrayList<>();
//Getters & Settors.... (Used Eclipse to Generate)
}
@Component
public class CmsNotiHandler {
public void handler() {
String restURL = System.getenv("nRestUrl");
RestTemplate restTemplate = new RestTemplate();
ParameterizedTypeReference<List<CmsObject>> listOffrn = new
ParameterizedTypeReference<List<CmsObject>>() {
};
ResponseEntity<List<CmsObject>> cmsResponse
= restTemplate.exchange(restURL, HttpMethod.GET, new
HttpEntity<>(getHeaders()), listOffrn);
List<CmsObject> cmsList = cmsResponse.getBody();
for (CmsObject cc : cmsList) {
System.out.println("Email List Size: " + cc.getEmails().size());
}
}
private static HttpHeaders getHeaders() {
String restServiceUsername = System.getenv("username");
String restServicePassword = System.getenv("password");
StringBuilder plainCredentials = new StringBuilder();
plainCredentials.append(restServiceUsername).append(":")
.append(restServicePassword);
String base64Credentials = new
String(Base64Utils.encode(plainCredentials.toString()
.getBytes(StandardCharsets.UTF_8)));
HttpHeaders headers = new HttpHeaders();
headers.add(AUTHORIZATION, "Basic " + base64Credentials);
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
return headers;
}
}
更改您的CmsObject类以匹配您获得的JSON
public class CmsObject {
private String attributeId;
private String attributeTitle;
private String someNumber;
private int totalAmount;
private ArrayList<String> emailList= new ArrayList<>();
//Getters & Settors.... (Used Eclipse to Generate)
//change getter & settor for emailList
}
如果您无法更改POJO中电子邮件的名称,可以使用@JsonProperty
Annotation
public class CmsObject {
private String attributeId;
private String attributeTitle;
private String someNumber;
private int totalAmount;
@JsonProperty("emailList")
private ArrayList<String> emails = new ArrayList<>();
//Getters & Settors.... (Used Eclipse to Generate)
}
我没有看到你实际上从json到对象的序列化,但我注意到在你的对象声明中,你正在初始化一个空列表private ArrayList<String> emails = new ArrayList<>();
。如果您在序列化后实际上能够访问列表,但它是空的,也许是因为您已将其声明为空,并尝试不声明它?