Как вернуть список из нескольких JSON элементов в java - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь понять, как вернуть несколько JSON элементов. Прямо сейчас я могу вернуть один JSON вот так:

{
    "result": {
        "userId": "abcde123",
        "telephoneNumber": "1-555-5555555"
        },
    "error": null
}

Но я хотел бы вернуть несколько JSON элементов, например:

{
    "result": {{
        "userId": "abcde123",
        "telephoneNumber": "1-555-5555555"
        }
        {
        "userId": "fghi456",
        "telephoneNumber": "1-333-3333333"
        }
        },
    "error": null
}

I можно просмотреть несколько элементов JSON в виде строки, как показано ниже, но я хотел бы вернуть их как несколько элементов JSON, но я не знаю, как:

[LDAPModel(userId=abcde123, telephoneNumber=1-555-5555555), LDAPModel(userId=fghi456, telephoneNumber=1-333-3333333]

Я полный новичок в Java, и я не знаю синтаксиса или многого в Java. Но эти коды (включая приведенный ниже) мне выдали от SpringBoot; Я действительно не понимаю, что он делает, и поэтому я понятия не имею, как создать вывод списка.

В настоящее время это то, что мне дали:

public Optional<LDAPModel> getDirectReports(String cdsID) {
        LdapQuery ldapQuery = LdapQueryBuilder.query()
                .searchScope(SearchScope.SUBTREE)
                .where("objectclass").is("person")
                .and("managerID").like(cdsID);

        List<LDAPModel> ldapModelList = ldapTemplate.search(ldapQuery, (Attributes attrs) ->
                LDAPModel.builder()
                        .userId(getValue(attrs, "userid"))
                        .telephoneNumber(getValue(attrs, "phoneNumber"))
                        .build());
//        for (int ii = 0; ii < ldapModelList.size(); ii++) {
//            Optional.of(ldapModelList.get(ii));
//            ldapModelList.isEmpty() ? Optional.empty() : Optional.of(ldapModelList.get(ii));
//        }
        return ldapModelList.isEmpty() ? Optional.empty() : Optional.of(ldapModelList.get(0));
    }

Я пробовал поместив его в al oop (как в закомментированном коде выше), но я не знаю, как создать список. Я попытался удалить get (0), но возникла синтаксическая ошибка ... Я много чего пробовал, но ничего не помогло.

Кто-нибудь может помочь?

Обновление / Изменить: спасибо всем за ваши ответы. Я разместил следующий вопрос здесь . Если у вас есть шанс, пожалуйста, помогите мне. Спасибо.

Ответы [ 3 ]

0 голосов
/ 05 августа 2020

Прежде всего, я хотел бы отметить, что ваш JSON неправильно отформатирован. Если вы хотите представить несколько объектов в JSON, вы должны использовать квадратные скобки и разделять каждый объект запятой:

{
    "result": [
        {
          "userId": "abcde123",
          "telephoneNumber": "1-555-5555555"
        },
        {
          "userId": "fghi456",
          "telephoneNumber": "1-333-3333333"
        }
        ],
    "error": null
}

Причина, по которой ваш код Java не работает, когда вы пытаетесь удалить get ( 0) потому, что метод public Optional<LDAPModel> getDirectReports(String cdsID) возвращает тип Optional<LDAPModel> и, удаляя get (0), вы фактически пытаетесь вернуть Optional<List<LDAPModel>>. Если вы хотите, чтобы метод возвращал список вместо одного объекта, вы можете изменить тип возвращаемого значения на Optional<List<LDAPModel>>, а затем безопасно удалить get (0).

public Optional<List<LDAPModel>> getDirectReports(String cdsID) {
        LdapQuery ldapQuery = LdapQueryBuilder.query()
                .searchScope(SearchScope.SUBTREE)
                .where("objectclass").is("person")
                .and("managerID").like(cdsID);

        List<LDAPModel> ldapModelList = ldapTemplate.search(ldapQuery, (Attributes attrs) ->
                LDAPModel.builder()
                        .userId(getValue(attrs, "userid"))
                        .telephoneNumber(getValue(attrs, "phoneNumber"))
                        .build());

        return ldapModelList.isEmpty() ? Optional.empty() : Optional.of(ldapModelList);
    }
0 голосов
/ 05 августа 2020

Я полагаю, вам уже удалось получить весь список / массив LDAPModel, т.е. List ldapModelList

Если это так, вам просто нужно вернуть этот ldapModelList в свой метод getDirectReports.

public List<LDAPModel> getDirectReports(String cdsID) {
    LdapQuery ldapQuery = LdapQueryBuilder.query()
            .searchScope(SearchScope.SUBTREE)
            .where("objectclass").is("person")
            .and("managerID").like(cdsID);

    List<LDAPModel> ldapModelList = ldapTemplate.search(ldapQuery, (Attributes attrs) ->
            LDAPModel.builder()
                    .userId(getValue(attrs, "userid"))
                    .telephoneNumber(getValue(attrs, "phoneNumber"))
                    .build());
    return ldapModelList;
}

Затем просто используйте свою библиотеку, чтобы вернуть массив json. Я полагаю, вы используете Джексона. Просто убедитесь, что в LDAPModel у вас есть

  1. геттеры и сеттеры
  2. пустой конструктор, если вы добавляете свой собственный конструктор с параметрами. Но если вы не добавляете конструктор, то нет необходимости добавлять этот пустой конструктор по умолчанию, поскольку java автоматически создаст его для вас.

Класс LDAPModel выглядит следующим образом:

public class LDAPModel {
    String userId;
    String telephoneNumber;

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getTelephoneNumber() {
        return telephoneNumber;
    }

    public void setTelephoneNumber(String telephoneNumber) {
        this.telephoneNumber = telephoneNumber;
    }
}
    

Для преобразования объекта в строку JSON с использованием Джексона, я полагаю, вы уже знаете это или можете узнать, как это сделать.

0 голосов
/ 05 августа 2020

Структура мне кажется странной. То, что у вас есть, похоже, вы хотите, чтобы результат был массивом объектов:

{
    "result": [
        { "userId": "abcde123",
          "telephoneNumber": "1-555-5555555" }
        { "userId": "fghi456",
          "telephoneNumber": "1-333-3333333" }
        ],
    "error": null
}

Учитывая разумную JSON библиотеку, тогда значением члена «результата» объекта JSON будет JSON массив, из которого затем вы можете выбрать каждый элемент по очереди путем индексации, и каждый элемент представляет собой JSON объект с 2 членами.

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