Java JSON 日期作为映射键转换
Java JSON date as map key conversion
我有一个无法解释的 Jersey 行为。
当将日期序列化为 DTO 的属性时,我会得到时间戳(这对我来说很好)。
像 :
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 格式?
谢谢。
终于,我找到了一个好方法。
Jersey 中有一个配置对象,它允许 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;
}
}
我有一个无法解释的 Jersey 行为。 当将日期序列化为 DTO 的属性时,我会得到时间戳(这对我来说很好)。 像 :
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 格式?
谢谢。
终于,我找到了一个好方法。 Jersey 中有一个配置对象,它允许 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;
}
}