Конвертировать строку json в дату Object - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть сценарий, в котором мне нужно сохранить динамические атрибуты в базе данных в форме HashMap, предоставленной пользователем с помощью службы отдыха.Эти динамические атрибуты определены как

HashMap<String, Object> attr = new HashMap<>();

Теперь мне нужно преобразовать объект в соответствующие им типы данных времени выполнения в соответствии с бизнес-логикой.До сих пор мне удалось преобразовать строки, числа, но Date вызывает проблемы.Это моя логика преобразования.

input = attr.get(label);
if (input instanceof String) {
      // logic 1
 } 
else if (input instanceof Number) {
      // logic 2
 }
else if (input instanceof Date)  {
      // logic 3
 } 

Проблема в том, что когда дата указывается в любом формате даты (в моем случае в формате зулу), преобразователь jacksonjson не может ее проанализировать и выдает ошибку, заявив, что не может проанализироватьвходная строка.Я понимаю, что это был Date объект.Я мог бы написать JsonDeserializer и аннотировать с ним объект Date, но как это Object в пределах HashMap, как мне этого достичь.

Я также пытался поймать эту датустрока и ее синтаксический анализ с использованием SimpleDateFormat, но не удалось, поскольку исключение происходит задолго до этой логики.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Если вы JDK современный - читайте 8 + , вы можете использовать java.time.DateFormat следующим образом:

java.time.format.LocalDate date = java.time.format.LocalDate.parse(ourDateAsString, java.time.format.DateTimeFormat.BASIC_ISO_DATE);
java.util.Date dateObject = java.util.Date.from(date.atStartOfDay()
      .atZone(java.time.ZoneId.systemDefault())
      .toInstant());

Надеюсь, что поможет.

0 голосов
/ 14 февраля 2019

если вы анализируете дату из json, вам, вероятно, следует сделать это.В JSON ваша дата является строкой.Вы должны преобразовать свою дату, которая является строкой, в фактический формат даты, используя SimpleDateFormat .Он не найдет, введите экземпляр Date , и вы не сможете проанализировать ваш json по фактической дате.Например, если ваш json выглядит следующим образом,

{'name':'firstname','date':'14/02/2019'}

Теперь вы можете преобразовать дату в фактическую дату следующим образом:

SimpleDateFormat formatter1=new SimpleDateFormat("dd/MM/yyyy");


Date date1=formatter1.parse(input); //here input is taken from your case which represent date  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...