运用Jackson时转换JSON时,日期格式设置
使用Jackson时转换JSON时,日期格式设置
兄弟,我解决了,我的那个数组是[timestamp,timestamp],hibernate查出来的结果,我把date换成sql.date而不是tuil。date或timestamp,就不会序列化成毫秒了
近日,使用Jackson转化JSON对象的时候,显示的时候,日期始终显示不正确,输出的日期是一串数字代表的时间戳,不符合要求,所以想到Jackson应当有方法设置输出的日期格式。后来一查果然有两种方式来实现:
1.普通的方式:
默认是转成timestamps形式的,通过下面方式可以取消timestamps。
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
这样将使时间生成使用所谓的use a [ISO-8601 ]-compliant notation, 输出类似如下格式的时间: "1970-01-01T00:00:00.000+0000".
当然也可以自定义输出格式:
objectMapper.getSerializationConfig().setDateFormat(myDateFormat);
myDateFormat对象为java.text.DateFormat,具体使用清查java API
2.annotaion的注释方式:
先定义自己需要的格式,例如:
import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.JsonSerializer; import org.codehaus.jackson.map.SerializerProvider; /** * java日期对象经过Jackson库转换成JSON日期格式化自定义类 * @author godfox * @date 2010-5-3 */ public class CustomDateSerializer extends JsonSerializer<Date> { @Override public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = formatter.format(value); jgen.writeString(formattedDate); } }
然后在你的POJO上找到日期的get方法
@JsonSerialize(using = CustomDateSerializer.class) public Date getCreateAt() { return createAt; }
好了,记录完毕
1 楼
唯快不破
2010-07-18
兄弟,当我序列化一java数组成json串时,如[Date,Date]。你提供的方法都不起作用
2 楼
唯快不破
2010-07-19
唯快不破 写道
兄弟,当我序列化一java数组成json串时,如[Date,Date]。你提供的方法都不起作用
兄弟,我解决了,我的那个数组是[timestamp,timestamp],hibernate查出来的结果,我把date换成sql.date而不是tuil。date或timestamp,就不会序列化成毫秒了
3 楼
Romotc
2012-04-04
也有相应的反序列化配置方法:
1.objectMapper.getDeserializationConfig().setDateFormat(。。。);
2.JsonDeSerializer and @JsonDeSerialize(using = CustomDateDeSerializer.class)
1.objectMapper.getDeserializationConfig().setDateFormat(。。。);
2.JsonDeSerializer and @JsonDeSerialize(using = CustomDateDeSerializer.class)