springboot 返回前端utc时间格式和接收前端提交utc时间_spring boot 接收 utc 时间_多多小老虎的博客-程序员秘密

技术标签: spring  


前言

项目中,leader强制要求前后端必须使用utc时间格式进行交互,也就是返回给前端的时间换成utc,同时前端调用后面时间也使用utc时间格式
总体思路就是:
1.在返回和接收时间的UtcDto实体类上加上 @JsonFormat(pattern = “yyyy-MM-dd’T’HH:mm:ss.SSS’Z’”)
2.并且在application.yml配置spring mvc接收时间的格式也为 “yyyy-MM-dd’T’HH:mm:ss.SSS’Z’”

如下demo示例

一、项目结构

在这里插入图片描述

二、pom依赖

只需要引入springboot web start即可

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

完整pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cch</groupId>
    <artifactId>utcdemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>utcdemo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

三、application.yml配置如下

接收前端请求必须要有该配置,不然JsonFormat转换会失败

server:
  port: 8888

spring:
  mvc:
    format:
      date: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'  # 接收前端请求必须要有该配置,不然JsonFormat转换会失败

四、DateUtil

其实这个只是为方便管理时间格式

public class DateUtil {
    

    public static final String UTC_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

}

五、UtcDto

在@JsonFormat 的pattern指定时间格式为UTC

package com.cch.utcdemo.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;

/**
 * @Author chenchanghui
 * @date 2021/1/14 19:37
 */
@Data
public class UtcDto {
    
    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    private Date createTime;
}

六、UtcController

@RestController
@RequestMapping("/testutc")
public class UtcController {
    

    /**
     * 后端返回utc时间给前端
     * @return 
     */
    @RequestMapping(value = "", method = RequestMethod.GET)
    public ResponseEntity getUtcDate() {
    
        UtcDto utcDto = new UtcDto();
        utcDto.setCreateTime(new Date());
        return new ResponseEntity(utcDto, HttpStatus.OK);
    }

    /**
     * 后端接收前端发送的utc时间
     * @param utcDto 
     */
    @RequestMapping(value = "/query", method = RequestMethod.GET)
    public void queryUtcDate(UtcDto utcDto) {
    
        System.out.println(utcDto.getCreateTime());
    }
}

七、测试

后端返回前端UTC时间格式,测试ok
在这里插入图片描述

前端发送UTC时间格式给后端,测试ok
在这里插入图片描述
在这里插入图片描述

总结

工作中,后端返回utc时间给前端,前端根据浏览器所在时区进行处理展示。
同时前端发送请求给后端的时间也根据浏览器所在时区进行转换才发送给后端。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_36759535/article/details/112632663

智能推荐

程序员转实施工程师_实施工程师到底做什么的?我认为比程序员接触面更广_Dandakaranya的博客-程序员秘密

在学校学习软件设计专业的时候,老师就曾说过,IT专业找工作很容易的,别看工作时用的编程语言比较单一,但是学校的知识能让你找到IT行业各种种类的工作,比如程序员,测试,实施,技术支持,产品研发,数据库专员等等.........,以前一直做编程也就是JAVA程序员,接触到的都是测试,产品研发的人,一直认为实施就是给别人安装软件的,直到身体原因康复后不得不转行发现实施需要的综合能力挺强的。实施到底是做什...

iOS Pod 'xxx.h' file not found with <angled> include; use "quotes" instead_use quotes instead_豪冷啊的博客-程序员秘密

办法方案1 : https://blog.csdn.net/sinat_32972877/article/details/78275772更新 pods 之后,发觉一直提示要把#import &lt;AFN&gt; 改成#import“AFN” ,然后折腾了一会,看到可能是路径问题。然后把#import&lt;AFN/AFN.h&gt;,加上/ 。然后再Build Settin...

《运动控制系统》-----王斌锐_电机与运动控制系统pdf-程序员秘密

运动控制系统前言一 绪论1.1 运动的基本概念与分类1.2 运动控制系统的组成二 运动机构分析2.1 运动副前言自动控制领域有过程控制和运动控制两大分支;过程控制针对离散的过程量;运动控制针对的是实时的连续的控制;目前的运动控制主要侧重点在于电机原理以及伺服驱动器控制,而现代完整的运动控制系统不仅仅是这些。运动控制系统的组成运动的起源----驱动器;实现的基础----结构机构;数学基础/理论力学----运动学和动力学建模;控制系统的组成----运动感知,控制算法,控制器硬件一 绪论

各种机器学习的应用场景分别是什么_机器学习的应用范围_csdn_yuan88的博客-程序员秘密

作者:xyzh链接:https://www.zhihu.com/question/26726794/answer/151282052来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。写给懒得看的人:没有最好的分类器,只有最合适的分类器。随机森林平均来说最强,但也只在9.9%的数据集上拿到了第一,优点是鲜有短板。SVM的平均水平紧随其后,在10...

成都传智播客java培训10月份新班开班_IT-source的博客-程序员秘密

送走了国庆7天小长假,10月8日上午,传智播客成都java培训中心又迎来了新一期基础班开班 。    开班典礼上,无非是各种人物上台讲话,但传智播客的老师们字字珠玑,为新学员入学打下一剂“强心针”。            java培训班开班典礼为接下来40天的学习拉开了序幕,基础班学员将正式迎来学习的课程,开启他们的逐梦之旅,祝大家学习顺利、生活愉快。    金秋10月

查看apk包名和Activity的方法_dengdang7631的博客-程序员秘密

使用adb shell dumpsys window | findstr mCurrentFocus 命令查看当前运行的包名和Activity包名:com.mymoneyActivity:com.mymoney.ui.main.MainActivity转载于:https://www.cnblogs.com/Bella-fu/p/7516056.html...

随便推点

java集合之迭代器_sspudding的博客-程序员秘密

迭代器(Iterator)是一种设计模式、提供了一种方法,来对集合、容器进行遍历的方式,不需要关注底层数据结构和数据类型,来达到底层和上层遍历解耦的目的。简单来说呢,迭代器就是遍历集合的一种方式,并且必须依赖于集合而存在!但是他的底层实现还是不容易想通的,所以下面通过源码和我个人的理解来看一下啦~Iterator里面有三个方法:boolean hasNext() :判断集合是否还有元素;...

python里面读取h5文件报错OSError: Can‘t read data (address of object past end of allocation)_"file \"h5py/_selector.pyx\", line 361, in h5py._s_木里先森的博客-程序员秘密

报错如下: File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper File "h5py/h5d.pyx", line 182, in h5py.h5d.DatasetID.read File "h5py/_proxy.pyx", line 158, in h5py._p

mysql中忘记了root用户的密码? -----Jane Eyre_mysql中root密码忘了_CoderLix的博客-程序员秘密

重置MySQL密码步骤详解cmd – &gt; net stop mysql 停止mysql服务 * 需要管理员运行该cmd- 2 . 使用无验证方式启动mysql服务: mysqld --skip-grant-tables打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功use mysql;update user set passwor...

什么是DRM_beautyfuel的博客-程序员秘密

DRM,英文全称Digital Rights Management, 可以翻译为:数字版权管理。我的理解DRM就是对二进制传输文件的一种加密保护,比如视频,音频等;也就是说在从服务器端传递到客户端的时候存在private key 的保护,只有拥有对应的key才能打开节目的权利;具体解释:DRM,英文全称Digital Rights Management, 可以翻译为:数字版权管

Android --- 详细介绍透明式状态栏和沉浸式状态栏_手机透明状态栏_梁同学与Android的博客-程序员秘密

今天来写一个类似于qq空间的那种沉浸式效果。先来看看qq空间的这种效果我们看到,头部局上拉的时候有个头布局的透明是从0变化到1,当你下拉的时候,头部局透明度又从1变化到0了。始终效果看起来还是不错的,当然...

推荐文章

热门文章

相关标签