Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как в Restassured поместить в запрос Json массив объектов

rest
rest-assured
java
json
Теги: #<Tag:0x00007f7b621b0fa0> #<Tag:0x00007f7b621b0e60> #<Tag:0x00007f7b621b0d20> #<Tag:0x00007f7b621b0be0>

(Алексей Герасимов) #1

Здравствуйте. Мне нужно передать Json запрос такого вида:

{user_id, contacts: [], workplaces: [], specialities: []. regalia: []}

С “user_id” проблем нет - передается через Hashmap:

Map<String, Object> jsonAsMapProfileID = new HashMap<>();
jsonAsMapProfileID.put("user_id", "5b72dcc05bc4a619586eae12");

Но как добавить в запрос массив значений “contacts” типа

contacts{email: "dfjsfl@mail.ru", phone: "+7 (987) 897-98-74", instagram: "Inst"}

?


(Сергей Кузьмин) #2

используйте один из
com.google.gson.JsonSerializer
org.json.JSONObject
org.codehaus.jackson.*


(James Howlett) #3

Используй “com.google.gson”

Пример:

JsonObject json = new JsonObject();
json.addProperty(“user_id”, user_id);
JsonArray contacts = new JsonArray();
JsonArray workplaces = new JsonArray();
JsonArray specialities = new JsonArray();
JsonArray regalia = new JsonArray();
json.add(“contacts”, contacts);
json.add(“workplaces”, workplaces);
json.add(“specialities”, specialities);
json.add(“regalia”, regalia);

(Дмитрий Еремин) #4

Немного дольше по времени, но проще потом работать, если вы просто опишите модель

public class UserInfo {
    private String user_id;
    private Collection<Contact> contacts;
    private Collection<Workplace> workplaces;
    private Collection<Speciality> specialities;
    private Collection<Regalia> regalia;

    //геттеры и сеттеры
}

Создаете userInfo (новый экземпляр или маппите с помощью Gson | Jackson)
а потом просто

given()....body(userInfo).when().post().then()...

(Iryna Onyshchuk) #5

Если используете Itelij IDEA, очень советую плагин https://plugins.jetbrains.com/plugin/8634-robopojogenerator для генерации json обьектов + Lombok https://projectlombok.org/features/all чтоб убрать все лишние поля из сгенереных обьектов


(Алексей Герасимов) #6

Спасибо за такое количество советов. Я же проснулся с озарением и реализовал все через создание дополнительных Map-ов, без дополнительных библиотек. Какие есть минусы у такого подхода?

Map<String, Object> jsonAsMapProfile = new HashMap<>();
Map<String, Object> jsonAsMapProfileworkplaces = new HashMap<>();
Map<String, Object> jsonAsMapProfileservices = new HashMap<>();
Map<String, Object> jsonAsMapProfilechildren = new HashMap<>();
Map<String, Object> jsonAsMapProfileContact = new HashMap<>();
String SpecList[] = {Specialities};

    jsonAsMapProfile.put("user_id", UserID);
    jsonAsMapProfile.put("workplaces", jsonAsMapProfileworkplaces);
    jsonAsMapProfileworkplaces.put("depart", Depart);
    jsonAsMapProfileworkplaces.put("post", Post);
    jsonAsMapProfileworkplaces.put("role", Role);
    jsonAsMapProfile.put("specialities", SpecList);
    jsonAsMapProfile.put("services", jsonAsMapProfileservices);
    jsonAsMapProfileservices.put("label", Label);
    jsonAsMapProfileservices.put("id", ID);
    jsonAsMapProfileservices.put("children", jsonAsMapProfilechildren);
    jsonAsMapProfilechildren.put("label", LabelChild);
    jsonAsMapProfilechildren.put("cost", Cost);
    jsonAsMapProfilechildren.put("id", IDchild);
    jsonAsMapProfile.put("regalia", Regalia);
    jsonAsMapProfile.put("contacts", jsonAsMapProfileContact);
    jsonAsMapProfileContact.put("email", EmailCont);
    jsonAsMapProfileContact.put("phone", PhoneCont);
    jsonAsMapProfileContact.put("instagram", Instagram);
    jsonAsMapProfileContact.put("vk", Vk);
    jsonAsMapProfileContact.put("whatsapp", Whatsapp);
    jsonAsMapProfileContact.put("viber", Viber);
    jsonAsMapProfileContact.put("facebook", Facebook);
    jsonAsMapProfileContact.put("another", Other);