Есть такой JSON
{"list_request":[{
"client_id":"111",
"phone":"111111111"
},
{
"client_id":"222",
"phone":"22222222"
},
{
"client_id":"333",
"phone":"33333333"}]
}
передаю его в body через hashmap:
Map<String,String> verifyData = new HashMap<>();
verifyData.put("client_id", "111");
verifyData.put("phone", "111111111");
verifyData.put("client_id", "222");
verifyData.put("phone", "22222222");
verifyData.put("client_id", "333");
verifyData.put("phone", "33333333");
response = expect().statusCode(200)
.given().spec(spec)
.body(verifyData)
.when()
.post("/create");
getResponseBody();
Естественно, при запуске, хешмапа каждый раз перезаписывает одинаковый ключи и выдает последний массив
Body: { "phone": "33333333", "client_id": "333" }
а создавать новый обьект хешмап под каждый массив [client_id, phone] не очень нормально.
Как создать нормальный post body с одинаковыми параметрами ?
1 лайк
Polmik
(Egor Ryaboshapko)
09.Март.2017 11:04:26
#2
HashMap реализует концепцию : уникальный ключ - значение.
Не может быть два ключа с одним и тем же именем
Использовать разные ключи
Использовать не HashMap<String,String>
, а HashMap<String,Array>.
Тут считываем по ключу массив, и добавляем в него новое значение
что-то вроде
class Phone{
String id;
String number;
public Phone(String id,String number){}
//реализация класса (геттеры, сеттеры)
}
...
List<Phone> list=new ArrayList<Phone>();
HashMap<String,List<Phone>> map=new HashMap<>();
void add value(){
put(phone,list);
//добавление новых значение
get(phone).add(new Phone(параметры в конструктор));
}
3
. Поменять логику избавившись от HashMap
Daniil
09.Март.2017 12:00:04
#3
Как вариант(если нужны именно мапы):
List<Map> list = ImmutableList.of(
ImmutableMap.of("client_id", "111", "phone", "111111111"),
ImmutableMap.of("client_id", "222", "phone", "22222222"),
ImmutableMap.of("client_id", "333", "phone", "33333333"));
response = expect().statusCode(200)
.given().spec(spec)
.body(ImmutableMap.of("list_request", list))
.when()
.post("/create");
Immutable List/Map из com.google.guava , можно использовать обычные List/Map
хороший вариант, спасибо
но я нашел более аккуратный способ через загрузку из YAML файла
кому интересно http://yamlbeans.sourceforge.net/
iCok
(Nikita)
14.Июнь.2017 17:47:45
#5
можешь ещё посмотреть в сторону http://www.jsonschema2pojo.org/
Генеришь себе pojo класс.
И дальше работаешь с обычным java объектом.
List<ListRequest> list = new ArrayList();
list.add(new ListRequest().withClientId(1).withPhone(111));
JsonObject object = new JsonObject().withListRequest(list);
expect().statusCode(200)
.given().spec(spec)
.body(object)
.when()
.post("/create");
2 лайка
LaFee
(Arina)
09.Октябрь.2018 11:06:18
#6
iCok:
withListRequest
что подразумевалось под withListRequest?
Keda
(Ruslan Semerenko)
09.Октябрь.2018 12:20:10
#7
Скорее всего это ExtensionMethod, сотканный с помощью lombok, в котором автор создает JsonObject с полями из ListRequest.
Используйте Gson::toJson для сериализации объекта в json-строку. Либо ObjectMapper::writeValueAsString если используется jackson-databind.