新手村常驻居民 2024-04-25 14:31 采纳率: 16.2%
浏览 13
已结题

为什么后端给前端传递时间和接收时间都不同

后端给前端传递的时间参数

img


后端接收前端传递的参数

img

实体配置

img

这里的配置不起作用

img

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 14:31
    关注

    引自免费微信小程序:皆我百晓生

    在Java中,后端与前端之间传递日期时间时可能存在时间不一致的问题,这通常是因为日期时间格式化和解析的设置不匹配导致的。根据您提供的信息,我可以为您分析并提供解决方案。

    首先,让我们确认一下前端发送的日期时间格式是否与后端预期的一致。从图1中可以看到,前端发送的日期时间为 "2023-05-15 00:00:00",这是一个标准的ISO 8601格式(YYYY-MM-DDTHH:mm:ss),但没有时区信息。然而,后端的实体类配置似乎期望的是加上时区信息的格式(例如 "2024-04-25 14:29:57.749 GMT+8")。

    解决这个问题的方法有几种:

    1. 前端修改:确保前端在发送日期时间时包含正确的时区信息,比如 "2023-05-15T00:00:00+08:00" 或者 "2023-05-15T00:00:00Z"(UTC)。这样,后端可以正确地解析它。

    2. 后端调整:如果前端无法修改,可以在后端进行适当的调整。您可以考虑使用@JsonDeserialize注解,为Date字段指定一个定制的反序列化器,以便即使在没有时区的情况下也能正确处理日期。

    以下是使用Jackson库的定制反序列化器的一个例子:

    import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class CustomDateDeserializer extends JsonDeserializer<Date> {
        private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        @Override
        public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
            String dateStr = jsonParser.getText();
            try {
                return dateFormat.parse(dateStr);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
    
    @Entity
    public class YourEntity {
    
        @JsonDeserialize(using = CustomDateDeserializer.class)
        @GDateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        private Date data;
    
        // getters and setters...
    }
    

    这里我们创建了一个名为 CustomDateDeserializer 的类,它扩展了 JsonDeserializer<Date>。这个类会尝试解析前端发送的任何符合 "yyyy-MM-dd HH:mm:ss" 格式的字符串,并将其转换为 Date 对象。同时,保持现有的 @GDateTimeFormat@JsonFormat 注解用于序列化。

    1. Spring Boot 配置:检查Spring Boot的全局配置是否正确。您的配置看起来是正确的,即:

      spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
      spring.jackson.time-zone=GMT+8
      

      这些配置应该会影响所有由Jackson处理的日期时间序列化和反序列化过程。确保这些配置已经生效并且应用到了正确的环境(开发、测试还是生产)。

    2. 时区问题:如果问题仍然存在,可能是因为系统默认时区与指定的时区不符。确保服务器和客户端(如果有多个)的时区设置正确。

    通过上述方法,你应该能解决前后端时间不一致的问题。如果还有其他问题,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月25日
  • 创建了问题 4月25日

悬赏问题

  • ¥15 ecology9的待办推送外部系统
  • ¥15 Mplus跑出来的数据只有原数据的一半
  • ¥15 vue项目添加全局处理解决一些开发问题
  • ¥40 微信小程序前后端交互
  • ¥15 linux安装依赖问题
  • ¥50 数据预处理(大量数据)
  • ¥15 多设备数据融合可视化显示控制
  • ¥15 公众号关键词自动回复超链接
  • ¥18 help me! 希望大家来看看 吉~
  • ¥15 C++显示超限兔子集结