Ограничить размер json в методе post в java

У меня очень большой массив строк json и я хочу отправить HTTP-запрос, который принимает не более 5 МБ данных за один почтовый вызов или учитывает 1000 записей (приблизительно) для каждого вызова.

JSON:

Items:[
    {"Name" : "Chair",
     "price" : "30"},
    {"Name" : "Table",
    "price" : "40"},
    {"Name" : "laptop",
    "price" : "300"},
    ... 
]

Фрагмент Java:

public static void main(String args[]) throws Exception{
    URL url = new URL("http://example.com");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setConnectTimeout(5000);//5 secs
    connection.setReadTimeout(5000);//5 secs

    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "application/json");

    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());  
    out.write("json object");
    out.flush();
    out.close();
}

Прямо сейчас я отправляю весь массив json сразу. Может ли кто-нибудь помочь мне, как ограничить массив json, чтобы каждый раз я мог отправлять 1000 записей (приблизительно) одновременно в виде пакета.

Ну, вам нужно создать свой JSON с 1000 элементами и отправить его. Но поскольку я вижу здесь только "json object", это не поможет;)

AxelH 31.05.2018 07:58

Вам нужна помощь в разборе JSON и разделении его на партии?

Antho Christen 31.05.2018 09:02

@anchreg: да, вы можете помочь мне разбить на партии

swati 31.05.2018 09:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
337
1

Ответы 1

Попробуй это,

int batch_size = 1000;
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonObj, JsonObject.class);
JsonArray array = jsonObject.getAsJsonArray("items");
int numberOfBatches = array.size() / batch_size;
for(int i = 0; i <= numberOfBatches; i++) {
  JsonArray currentBatch = new JsonArray();
  for(int j = 0; (j < batch_size || j < array.size()); j++) {
    currentBatch.add(array.get((i * batch_size) + j));
  }
  //Your POST code
  JsonObject objtoSend = new JsonObject();
  objtoSend.add("items", currentBatch);
  out.write(gson.toJson(objtoSend));
  ...
}

Он использует библиотеку Gson для сериализации и десериализации данных.

свати, это помогло?

Antho Christen 04.06.2018 12:34

Другие вопросы по теме