在java中如何访问作为对@GETMapping API的Rest响应返回的对象数组中的List(电子邮件的ArrayList)

问题描述 投票:0回答:2

我正在使用GET API,作为回应,我得到一个对象数组,其中每个对象都有一个列表(电子邮件的ArrayList)。我可以访问除电子邮件列表之外的对象的所有值。我已尝试使用list,Array,String等...但我无法从Object中的List中访问电子邮件地址。

**请告诉我如何访问电子邮件列表?

我打印了attributeID,它为所有对象打印了attributeId,但我无法通过我的java代码访问电子邮件列表。如果我尝试,它会给我NullPointerException。

Output:

电子邮件列表大小:0电子邮件列表大小:0电子邮件列表大小:0电子邮件列表大小:0

我可以使用Postman获取整个对象列表,包括对象内的电子邮件列表。

Postman output (localhost:8080/ann/app):

[
{
    "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;
}

}

java rest aws-lambda
2个回答
0
投票

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

-1
投票

我没有看到你实际上从json到对象的序列化,但我注意到在你的对象声明中,你正在初始化一个空列表private ArrayList<String> emails = new ArrayList<>(); 。如果您在序列化后实际上能够访问列表,但它是空的,也许是因为您已将其声明为空,并尝试不声明它?

© www.soinside.com 2019 - 2024. All rights reserved.