Jackson De / Serializing Date-to-String-to-Date w ogólnych mapach

Istnieje wiele przykładów Jacksona do / z kodu java.util.Date, ale wszystkie wydają się wykorzystywać adnotację POJO. Mam ogólne mapy skalarów, które chcę de / serializować do JSON. To jest aktualna konfiguracja deserializatora; bardzo prosty:

public class JSONUtils {
    static {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");

        mapper = new ObjectMapper();

        mapper.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true);
        mapper.setDateFormat(df);  // this works for outbounds but has no effect on inbounds

        mapper.getDeserializationConfig().with(df); // Gave this a shot but still does not sniff strings for a format that we declare should be treated as java.util.Date                           
  }
  public static Map<String,Object> parseJSON(InputStream is) {
    Map<String,Object> data = null;

    try {
        data = mapper.readValue(is, Map.class);
    } catch(Exception e) {
      // ...
    }

    return data;
}

Grok, że dataserializator może zmienić java.util.Date w ciąg znaków ISO 8601-ish. To idzie w drugą stronę, która mnie zastanawia. Oczywiście w dokumencie JSON bez kontekstu łańcuch jest ciągiem znaków, więc nie mogę wiedzieć, czy był kiedyś datą. Więc jestem gotów na wpisanie tego i zbadanie wszystkich ciągów deserializowanych, a jeśli pachną tak jak YYYY-MM-DDTHH: MM: SS.sss datetimes, to zrobię java.util.Date zamiast przekazywać String. Tak podane:

{ "name": "buzz",
  "theDate": "2013-09-10T12:00:00.000"
}

przyniesie

Map<String,Object> m = mapper.readValue(is, Map.class);
Object o1 = m.get("name");   // o1 is instanceof String
Object o2 = m.get("theDate");  // o2 is instanceof Date

Ale to oznacza, że ​​deserializer musi zwrócić dwa różne typy i nie byłem w stanie dowiedzieć się, jak to zrobić w Jackson. Czy ktoś wie o dobrym, zwartym przykładzie, który wyczuje ciągi daty i przekształci je w Daty, pozostawiając inne jako Ciągi?

questionAnswers(4)

yourAnswerToTheQuestion