You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson ObjectMapper转换后Date字段返回时间戳而非日期格式问题

解决JSON转对象排序+Date字段返回格式问题

嘿,这个问题我刚好碰到过,分两部分来帮你搞定:

一、JSON转User对象并按日期排序Feedback列表

首先确保你的实体类结构和JSON字段对应,比如:

public class User {
    private Feedbacks feedbacks;
    // getter/setter
}

public class Feedbacks {
    private ArrayList<Feedback> feedbackList;
    // getter/setter
}

public class Feedback {
    private Date date;
    // 其他字段 + getter/setter
}

1. JSON转User对象

用ObjectMapper直接反序列化就行:

ObjectMapper objectMapper = new ObjectMapper();
// 如果JSON字段和实体类字段名有差异,可通过@JsonProperty注解映射
User user = objectMapper.readValue(yourDatabaseJsonString, User.class);

2. 按日期排序Feedback列表

拿到User里的Feedbacks后,对feedbackList排序,两种方式任选:

Feedbacks feedbacks = user.getFeedbacks();
if (feedbacks != null && feedbacks.getFeedbackList() != null) {
    // 方式1:用Collections.sort(升序,降序就调换o2和o1的位置)
    Collections.sort(feedbacks.getFeedbackList(), (o1, o2) -> 
        o1.getDate().compareTo(o2.getDate())
    );

    // 方式2:用Stream API(更简洁易读)
    List<Feedback> sortedList = feedbacks.getFeedbackList()
        .stream()
        .sorted(Comparator.comparing(Feedback::getDate))
        .collect(Collectors.toList());
    feedbacks.setFeedbackList(sortedList);
}

二、解决Angular前端接收到Date为时间戳的问题

默认情况下Jackson会把Date序列化为时间戳,有三种方案可选:

方案1:后端全局配置Jackson日期格式(推荐)

如果是Spring Boot项目,直接在application.properties(或yml)里加:

# 指定日期格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
# 设置时区,根据业务调整,比如东八区填GMT+8
spring.jackson.time-zone=GMT+8

这样所有返回的Date字段都会变成指定格式的字符串,前端直接使用即可。

方案2:实体类字段上加注解单独配置

如果只想给某个Date字段指定格式,在Feedback类的date字段上加@JsonFormat:

public class Feedback {
    @JsonFormat(shape = JsonFormat.Shape.STRING, 
                pattern = "yyyy-MM-dd HH:mm:ss", 
                timezone = "GMT+8")
    private Date date;
    // 其他字段和getter/setter
}

方案3:前端Angular处理时间戳

如果不想修改后端,前端可以把时间戳转成日期对象,甚至格式化显示:

// 工具方法:时间戳转Date对象
convertTimestampToDate(timestamp: number): Date {
    return new Date(timestamp);
}

// 使用DatePipe格式化显示(需在组件中注入DatePipe)
import { DatePipe } from '@angular/common';

// 示例:把时间戳转成指定格式字符串
formattedDate = this.datePipe.transform(feedback.date, 'yyyy-MM-dd HH:mm:ss');

总结

优先推荐方案1,全局配置日期格式能保证前后端数据格式统一,减少后续维护成本。排序部分用Stream API更简洁易读~

内容的提问来源于stack exchange,提问作者ps2090

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:59:57