首页 > 解决方案 > 在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;
}

}

标签: javarestaws-lambda

解决方案


更改您的 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)
    }

推荐阅读