Jackson返回日期格式

本文详细介绍了在使用Jackson库进行JSON对象转化时,如何调整日期格式输出,包括取消默认的时间戳输出和自定义输出格式的方法。通过提供示例代码,展示了如何使用Java API和注释方式来实现日期输出格式的定制。
部署运行你感兴趣的模型镜像
近日,使用Jackson转化JSON对象的时候,显示的时候,日期始终显示不正确,输出的日期是一串数字代表的时间戳,不符合要求,所以想到Jackson应当有方法设置输出的日期格式。后来一查果然有两种方式来实现:

1.普通的方式:

默认是转成timestamps形式的,通过下面方式可以取消timestamps。

Java代码
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);

objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false); 这样将使时间生成使用所谓的use a [ISO-8601 ]-compliant notation, 输出类似如下格式的时间: "1970-01-01T00:00:00.000+0000".

当然也可以自定义输出格式:

Java代码
objectMapper.getSerializationConfig().setDateFormat(myDateFormat);

objectMapper.getSerializationConfig().setDateFormat(myDateFormat);
Java代码
myDateFormat对象为java.text.DateFormat,具体使用清查java API

myDateFormat对象为java.text.DateFormat,具体使用清查java API2.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);
}
}


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;
}


StringWriter sw = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
JacksonUtil.getInstance().writeValue(gen, jsonlist);
gen.close();
String finalInfo = sw.toString();
System.out.println("finalinfo is:"+finalInfo );

您可能感兴趣的与本文相关的镜像

Qwen-Image

Qwen-Image

图片生成
Qwen

Qwen-Image是阿里云通义千问团队于2025年8月发布的亿参数图像生成基础模型,其最大亮点是强大的复杂文本渲染和精确图像编辑能力,能够生成包含多行、段落级中英文文本的高保真图像

在 Spring Boot 中全局修改 Jackson 返回日期格式,可以通过配置 `application.properties` 或 `application.yml` 文件来实现对 Jackson 的默认行为进行调整。该方式适用于所有通过控制器返回JSON 数据,确保日期字段以统一的格式输出。 ### 配置日期格式与时区 Spring Boot 使用 Jackson 作为默认的 JSON 序列化工具,其默认行为是将时间类型(如 `Date`、`LocalDateTime`)转换为 ISO 8601 格式,并使用服务器所在操作系统的时区。若需改变此行为,可在配置文件中指定日期格式和时区: ```yaml spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: Asia/Shanghai ``` 上述配置会将所有日期序列化为 `"yyyy-MM-dd HH:mm:ss"` 格式,并基于上海时区进行展示,从而避免因时区差异导致的时间偏差 [^1]。 ### 支持 Java 8 的 LocalDateTime 格式化 若项目中同时使用了 `java.util.Date` 和 `java.time.LocalDateTime` 类型,则仅配置 `date-format` 可能无法覆盖所有情况。此时应自定义一个配置类,注入 `Jackson2ObjectMapperBuilderCustomizer` 和 `LocalDateTimeSerializer`,以支持两种类型的统一格式化: ```java @Configuration public class LocalDateTimeSerializerConfig { private final String pattern; public LocalDateTimeSerializerConfig(@Value("${spring.jackson.date-format}") String pattern) { this.pattern = pattern; } @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeSerializer()); } @Bean public LocalDateTimeSerializer localDateTimeSerializer() { return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } } ``` 此方法可确保 Jackson 在处理 `LocalDateTime` 类型时也遵循配置文件中定义的格式,实现更全面的日期格式化控制 [^3]。 ### 注意事项 - 上述配置会影响整个应用中所有返回 JSON 数据的日期格式,因此建议在开发初期就完成此类设置。 - 若前端需要特定格式(如 ISO 8601),则应在后端保持一致输出或由前端进行二次格式化处理。 - 时区配置应与数据库及业务逻辑所预期的一致,避免出现存储与展示不匹配的问题 [^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值