java - 在java中如何访问作为对@GETMapping API的Rest响应返回的对象数组中的列表(电子邮件的ArrayList)
问题描述
我正在点击 GET API,作为响应,我得到了一个对象数组,其中每个对象都有一个列表(ArrayList of emails)。我可以访问除电子邮件列表之外的对象的所有值。我尝试过使用列表、数组、字符串等...但我无法从对象内的列表中访问电子邮件地址。
** 请告诉我如何访问电子邮件列表?
我打印了属性 ID,它打印了所有对象的属性 ID,但我无法通过我的 java 代码访问电子邮件列表。如果我尝试,它会给我 NullPointerException。
输出:
电子邮件列表大小:0 电子邮件列表大小:0 电子邮件列表大小:0 电子邮件列表大小:0
我可以使用 Postman 获取整个对象列表,包括对象内的电子邮件列表。
邮递员输出(本地主机: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)
}
推荐阅读
- r - r 带有 containerRit 的 Dockerfile 导致关闭错误
- c# - asp.net ActionResult 看不到控制器中的静态数据
- batch-file - 获取压缩档案名称的一部分并将其附加到其中的文件中
- ios - 304 在 iOS Cordova 应用上播放 html5 视频时未修改
- javascript - 如何从图像中删除标题
- r - R data.table 根据 j 中的列动态过滤行
- android - proguard 不删除日志
- node.js - 如何在打字稿中使用节点配置?
- php - PHP有条件地从数组中检索数据
- php - ErrorException (E_ERROR) 试图获取非对象的属性“id”(查看:-laravel 5.5