Как засунуть HashMap в JobParameters

В Spring Batch я создаю

JobParametersBuilder jobBuilder= new JobParametersBuilder();
            jobBuilder.addString("filename", "file1");
            jobBuilder.addString("studentName","Piter");
            ...
            JobParameters jobParameters =jobBuilder.toJobParameters();

Который потом извлекаю из него в ItemWriter

final Map<String, JobParameter> parameters =
    stepExecution.getJobExecution().getJobParameters().getParameters();
String filename = parameters.get("filename").toString();

Все было хорошо пока мне не понадобилось добавить

Map<String, String> properties = new HashMap<>:

добавил вот так:

final JobParametersBuilder properties= new JobParametersBuilder();
for (Map.Entry<String, String> entry : properties.entrySet()) {
  paramsProp.addString(entry.getKey(), entry.getValue());
}
jobBuilder.addJobParameters(paramsProp.toJobParameters())

Вот только теперь как это все извлечь с учетом моих строковых полей?


Ответы (1 шт):

Автор решения: Aziz Umarov

Не усложняйте жизнь. Сделайте просто, добавьте в название ключа индикатор отдельного объекта и также продолжайте вставлять в jobBuilder

Map<String, String> properties = new HashMap<>();

for (Map.Entry<String, String> entry : properties.entrySet()) {
  jobBuilder.addString("$properties_" + entry.getKey(), entry.getValue());
}

при считывании проверьте содержит ли ключ этот индикатор "$properties_", удаляете его и создаете ваш

   Map<String, String> properties = new HashMap<>();

обратно из этих ключей.

Другой вариант

   Map<String, String> properties = new HashMap<>();

переведите JSONObject

   JSONObject propertiesJson = new JSONObject(properties);
   jobBuilder.addString("$properties", propertiesJson.toString());

обратно также просто, переводите в JSONObject и конвертируете в HashMap

→ Ссылка