我正在击中get api,作为响应,我得到了一个对象,每个对象都有一个列表(电子邮件的阵列列表)。除了电子邮件列表外,我可以访问对象的所有值。我尝试使用列表,数组,字符串等...但是我无法从对象内的列表中访问电子邮件地址。
**请告诉我如何访问电子邮件列表?
我打印了属性,并为所有对象打印属性,但是我无法通过我的Java代码访问电子邮件列表。如果我尝试,它会给我NullPoInterException。
输出:
电子邮件列表大小:0电子邮件列表大小:0电子邮件列表大小:0电子邮件列表大小:0
我能够使用Postman。
Postman输出(Localhost:8080/ann/app):
[
{
"attributeId": 12345,
"attributeTitle": "Hello World",
"someNumber": null,
"totalAmount": 20,
"emailList": [
"emp1725@xxmail.com",
"emp3399@xxmail.com",
"emp9125@xxmail.com",
"emp9978@xxmail.com",
]
},
{
"attributeId": 23456,
"attributeTitle": "Hello America",
"someNumber": null,
"totalAmount": 30,
"emailList": [
"dmp1725@xxmail.com",
"dmp3399@xxmail.com",
"dmp9125@xxmail.com",
"dmp9978@xxmail.com",
]
},
{
"attributeId": 34567,
"attributeTitle": "Hello Texas",
"someNumber": null,
"totalAmount": 40,
"emailList": [
"bng1725@xxmail.com",
"bng3399@xxmail.com",
"bng9125@xxmail.com",
"bng9978@xxmail.com",
]
},
{
"attributeId": 45678,
"attributeTitle": "Hello California",
"someNumber": null,
"totalAmount": 50,
"emailList": [
"wtm1725@xxmail.com",
"wtm3399@xxmail.com",
"wtm9125@xxmail.com",
"wtm9978@xxmail.com",
]
}
]
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
注释
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<>();
。如果您在序列化后实际上可以访问列表,但是它是空的,也许是因为您已将其声明为空,并且尝试不声明它?