2015-02-12 6 views
0

У меня возникло необъяснимое поведение Джерси. Когда сериализация даты как атрибута DTO, я получу временную метку (это нормально для меня). Что-то вроде:Java JSON date как преобразование ключа карты

Java : 
Date day = new Date(); 

JSon : 
{ 
    "day" : 1422831600000 
} 

Но имея такой более сложный DTO с картой с использованием даты в качестве ключа.

Java : 
Map<Date, String> mapData = new HashMap<Date, String>(); 
    mapData.put(new Date(), "TEST"); 

JSON : 
{ 
    mapData : { 
     "2015-02-01T23:00:00.000+0000" : "TEST" 
    } 
} 

Как я могу получить просто в случае с карточкой временную метку вместо формата ISO?

Спасибо.

+0

посмотреть на http://stackoverflow.com/questions/4428109/jersey-jackson-json-date-format-serialization-how-to-change-the-format-or -нас – learningJava

ответ

0

Наконец, я нашел хороший способ сделать это. В Джерси есть объект конфигурации, который позволяет провайдеру Jackson записывать дату как временную метку, когда она используется как ключ в карте.

@Provider 
public class MyJacksonProvider implements ContextResolver<ObjectMapper>{ 

private ObjectMapper objectMapper; 

public PolarisJacksonProvider() { 
    objectMapper = new ObjectMapper(); 
    SimpleModule module = new SimpleModule("MyModule"); 
    objectMapper.registerModule(module); 
    objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, true); 
} 

/** 
* {@inheritDoc} 
* 
* @see javax.ws.rs.ext.ContextResolver#getContext(java.lang.Class) 
*/ 
@Override 
public ObjectMapper getContext(Class<?> type) { 
    return objectMapper; 
} 

}

Смежные вопросы