Jackson2HashMapper не сериализует Date с Flatten = True - PullRequest
0 голосов
/ 09 января 2019

Использование Jackson Hash Mapper с Flatten = true мои поля Date удаляются. Это правильное поведение или ошибка? Есть ли способ сериализации Date с Flatten = true?

Я использовал следующий тест Pojo:

import java.util.Date;
public class FooClass{
  private Boolean foolean;
  private Integer barteger;
  private String simpleString;
  private Date myDate;
  public void setFoolean(Boolean value){ foolean = value; }
  public Boolean getFoolean(){ return foolean; }
  public void setBarteger(Integer value){ barteger = value; }
  public Integer getBarteger(){ return barteger; }
  public void setSimpleString(String value) { simpleString = value; }
  public String getSimpleString(){ return simpleString; }
  public void setMyDate(Date value) { myDate = value; }
  public Date getMyDate(){ return myDate; }
}

public class Main {
  public static void main(String[] args) throws ParseException, 
    JsonParseException, JsonMappingException, IOException {
    Jackson2HashMapper hashMapper = new Jackson2HashMapper(true);

    FooClass fooObject = new FooClass();
    fooObject.setFoolean(true);
    fooObject.setBarteger(10);
    fooObject.setSimpleString("Foobar");
    fooObject.setMyDate(new Date());

    Map<String, Object> hash = hashMapper.toHash(fooObject);
    for (String key: hash.keySet())
    {
      System.out.println("hash contains: " + key + "=" + 
      hash.get(key.toString()));
    }

    FooClass newFoo = (FooClass)(hashMapper.fromHash(hash));
    System.out.println("FromHash: " + newFoo);
  }
}

В этом случае я получаю следующий вывод:

hash contains: @class=FooClass
hash contains: foolean=true
hash contains: barteger=10
hash contains: simpleString=Foobar
FromHash: FooClass@117159c0

Если я меняю новый Jackson2HashMapper (false); тогда я получаю:

hash contains: @class=FooClass
hash contains: foolean=true
hash contains: barteger=10
hash contains: simpleString=Foobar
hash contains: myDate=[java.util.Date, 1547033077869]
FromHash: FooClass@7ed7259e

Я ожидал, что поле Date будет сериализовано в обоих случаях - возможно, с дополнительным полем, описывающим тип даты (плоский).

Я проследил причину этого до следующей строки в коде HashMapper: typingMapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY); Где настроен маппер.

1 Ответ

0 голосов
/ 23 июня 2019

Кажется, выдается в Jackson2HashMapper. Покопавшись в источнике Jackson2HashMapper, похоже, что проблема в Jackson2HashMapper. создал проблему для этого, DATAREDIS-1001 Jackson2HashMapper не сериализует поля Date / Calender, когда flatten = true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...