В Java Как получить доступ к списку (ArrayList из электронных писем) внутри массива объектов, возвращаемых как ответ Rest на API @GETMapping - PullRequest
0 голосов
/ 23 февраля 2019

Я нажимаю GET API и в ответ получаю массив объектов, в котором у каждого объекта есть список (ArrayList of emails).Я могу получить доступ ко ВСЕМ значениям объекта, кроме Списка писем.Я пробовал со списком, массивом, строкой и т. Д., Но я не могу получить доступ к адресам электронной почты из списка внутри объекта.

** Покажите, пожалуйста, как я могу получить доступ к списку писем?

Я напечатал attributeID, и он напечатал attributeId для всех объектов, но я не могу получить доступ к списку электронных писем через мой код Java.Если я попытаюсь, это выдаст NullPointerException.

Вывод:

Размер списка рассылки: 0 Размер списка рассылки: 0 Размер списка рассылки: 0 Размер списка рассылки: 0

IЯ могу получить весь список объектов, включая список электронных писем внутри объектов, используя 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;
}

}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Измените ваш класс 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)
    }
0 голосов
/ 23 февраля 2019

Я не вижу, где вы на самом деле выполняете сериализацию от json до объекта, но я заметил, что в объявлении вашего объекта вы инициализируете пустой список private ArrayList<String> emails = new ArrayList<>(); .Если вы действительно можете получить доступ к списку после сериализации, но он пуст, может быть, это потому, что вы объявили его пустым и попробуйте просто не объявлять его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...