在Java中,如何访问一系列对象内的列表(电子邮件阵列)作为@getMapping API的休息响应



我正在击中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<>(); 。如果您在序列化后实际上可以访问列表,但是它是空的,也许是因为您已将其声明为空,并且尝试不声明它?

相关内容

最新更新