Jasper Reports: как передать JSON в качестве входного потока с помощью REST APIJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Jasper Reports: как передать JSON в качестве входного потока с помощью REST API

Сообщение Anonymous »

Я пытаюсь передать строку JSON в качестве входного потока в шаблон Jasper Reports, используя его REST API, и не могу заставить его работать: иногда шаблон просто пуст (нет данных), иногда имеет нулевые значения, иногда я получаю ошибку при печати .
Важно то, что мы не используем никакую библиотеку JasperReports, а только их REST API.
Вот что у меня есть.Параметры запроса к серверу Jasper (сторона Java):

Код: Выделить всё

String jsonString = "{\"name\":\"One\", \"age\":Two, \"car\":Three}";
InputStream iostream = new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8));
reportData.put("data", iostream);
Запросить полезную нагрузку на сервер Jasper:

Код: Выделить всё

{
"reportUnitUri": "/reports/***/v1/***",
"outputFormat": "pdf",
"async": false,
"freshData": true,
"saveDataSnapshot": false,
"interactive": true,
"allowInlineScripts": true,
"ignorePagination": false,
"pages": null,
"attachmentsPrefix": null,
"parameters":
{
"reportParameter":
[
{
"name": "data",
"value":
[
"java.io.ByteArrayInputStream@7f8e1831"
]
}
]
}
}
Шаблон Jasper:

Код: Выделить всё



...also tried...


Результат: пустой отчет.
Пытался использовать поддельные фиктивные значения — работает, печатает, но не может ничего получить из параметра «данные»: Попытка использовать тип JsonDatasource –  – результат: неверный отчет .
Пытался использовать имя параметра JSON_INPUT_STREAM и передать его из кода Java, но это тоже нарушило отчет.
В целом, после печати отчет с разными комбинациями параметров. У меня либо пустая страница и заполнен раздел «Нет данных» (для тестовых целей), либо заполненная страница, но значение параметра нулевое.
Единственный вариант, который работает это:
  • Передать параметр отчета в виде строки JSON

Код: Выделить всё

String datasetJson = objectMapper.writeValueAsString(dataSet.getData());
reportData.put("reportData", datasetJson);
  • В шаблоне отчета обработайте это следующим образом:
И это работает. Но, как вы можете видеть, я привел свою строку к новому java.io.ByteArrayInputStream, что не очень хорошо. Почему бы не прочитать поток из карты параметров?
Поэтому у меня вопрос: как правильно передать поток данных в шаблон отчета? Если поток данных использовать непросто, я могу попробовать переключиться на передачу объекта вместо потока. Пожалуйста, помогите мне найти, что я делаю не так.
Заранее спасибо!
Также пробовал эти ответы:
  • Как заполнить отчет с использованием источника данных JSON, не получая нулевых значений?
  • Заполнение отчетов из json с помощью JasperReports
  • Отчет Jasper — передача потока ввода-вывода json в подотчет
  • https://community.jaspersoft.com/forums ... -subreport /
  • Как передать данные JSON в отчет Jasper с помощью rest


Подробнее здесь: https://stackoverflow.com/questions/789 ... g-rest-api
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»