前后端时间传递之注解形式(@DateTimeFormat与@JsonFormat)

这篇具有很好参考价值的文章主要介绍了前后端时间传递之注解形式(@DateTimeFormat与@JsonFormat)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

在我们开发的过程中常常会遇到前后端传递时间的问题,同样笔者也是遇到了这样的问题,以前笔者的做法是在代码中转换:前端传String类型的时间,然后后端用String接收以后存入数据库时再转化为Date;返回给前端时也是一样,先从数据库中查出Date类型的数据,返回给前端时转化为String,非常麻烦。后来也是看到了用注解的方式非常方便,在这里记录并共享一下。

二、前端传后端(@DateTimeFormat)

前端给后端传递时间参数的时候传递的都是String类型的数据,后端如果用数据库类型Date来接收的话,则会报
异常。此时后端如果在对应的时间字段上加上 @DateTimeFormat 注解,就可以解决这个问题,而且在存入数据库
的时候依然用这个字段,而不用再进行类型转化。

2.1 场景

前端传过来的时间参数为String类型的数据的时候,就可以用如下的注解方式去接收数据,需要注意的是,注解中
的样式如果为yyyy-MM-dd HH:mm:ss的话,前端穿的时候必须是这样的格式,如果前端只传yyyy-MM-dd的话,就
会报异常。

2.2 例子

    //此时库里datetime类型的数据可以用Date类型直接进行存储
 	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

注意:这里的Date是在java.util.Date;这个包下面的,不要引用错误了。

三、后端传前端

3.1 场景

后端传递给前端去展示时间的时候也是将时间转化为String类型的时间数据去返回。此时就需要加上 @JsonFormat
注解来解决这个问题。

3.2 例子

	//这里就可以根据前端需要展示的时间格式进行返回,修改patter样式即可
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",locale = "zh", timezone = "GMT+8")
    private Date updateTime;

注意:这里的这个注解是在com.fasterxml.jackson.annotation.JsonFormat;这个包下的。并且时区记得加上,不然时间会少八个小时。

四、java.sql包下的Date用法

4.1 说明

当前端展示为yyyy-MM-dd时并且后端也存为yyyy-MM-dd的时候可以用java.sql包下的Date来作为时间数据
类型,此时后端无需做任何处理即可接收到前端传过来的该格式的数据。后端返回时也无需处理就会直接将该格式
的数据返回。

注意:和数据库映射的类中的时间格式也要用java.sql包下的Date类型。如果用java.util包下的Date则要用上面的注解进行处理。

4.2 结果测试

4.2.1 swagger请求传参

前后端时间传递之注解形式(@DateTimeFormat与@JsonFormat)

4.2.2 接口
@RestController
@RequestMapping("/test")
public class TestController {

    @Resource
    TestService testService;

    @PostMapping("/save")
    public TestVO save(TestDTO testDTO) {
    	//测试类
        Test test = new Test();
        //属性拷贝
        BeanUtils.copyProperties(testDTO, test);
        boolean save = testService.save(test);
        //如果新增成功就把该数据转化为Vo的形式返回
        if (save) {
            Integer id = test.getId();
            Test testObj = testService.getById(id);
            TestVO testVO = new TestVO();
            BeanUtils.copyProperties(testObj, testVO);
            return testVO;
        }
        return null;
    }

}
4.2.3 接口中用到的实体类
//实体类1
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "test", autoResultMap = true)
public class Test extends BaseEntity{

    private static final long serialVersionUID = 1L;

    /**
     * 姓名
     */
    private String name;

    /**
     * 地址
     */
    private String address;

}

//公共实体类2,Model是mybatis-plus的类
@Data
public class BaseEntity<T extends Model> extends Model {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    protected Integer id;

    /**
     * 逻辑删除标识
     */
    @TableLogic(value = "false", delval = "true")
    @ApiModelProperty(value = "逻辑删除标识")
    private Boolean deleted = Boolean.FALSE;

    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    @ApiModelProperty(value = "更新时间")
    private Date updateTime;

    @Override
    protected Serializable pkVal() {
        return this.id;
    }
4.2.4 返回结果

前后端时间传递之注解形式(@DateTimeFormat与@JsonFormat)
参考博客:
https://blog.csdn.net/imVainiycos/article/details/102712056
https://blog.csdn.net/Amir_wu/article/details/102563152

说明:本文章内容为笔者亲测有效,若有不当之处,希望各位大佬不吝赐告,笔者定当虚心接收并改正。文章来源地址https://www.toymoban.com/news/detail-454026.html

到了这里,关于前后端时间传递之注解形式(@DateTimeFormat与@JsonFormat)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端传递对象参数,以及后端接受参数 @PathVariable @RequestParam @RequestBody 注解的使用

    太久没写前后端传递参数了,总是格式对不上号 提示:以下是本篇文章正文内容,下面案例可供参考 拼接在 url 地址中的 后端 前端 api 调用请求 拼接在 url 地址后面的 后端 前端 api 调用请求 放在请求头当中 后端 前端 api 调用请求 前端传递对象,后端接收对象 放在请求体中的

    2023年04月26日
    浏览(49)
  • vue传递给后端时间格式问题

    首先前端使用moment.js进行处理 解释: @DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)设定接受前端传递过来的时间格式 @JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”)注解:把数据库中datetime的格式取出来转化为yyyy-MM-dd HH:mm:ss格式。

    2024年02月09日
    浏览(55)
  • @RequestMapping运用举例(有源码) 前后端如何传递参数?后端如何接收前端传过来的参数,传递单个参数,多个参数,对象,数组/集合(有源码)

    目录 一、@RequestMapping  路由映射 二、参数传递 1、传递单个参数 2、传递多个参数 3、传递对象 4、后端参数重命名 5、传递数组 6、传递集合 7、传递JSON 8、获取url中的参数 9、上传图片/文件 指定请求访问的路径 既可以修饰类,又可以修饰方法 @RequestMapping支持Get、Post、Dele

    2024年02月04日
    浏览(52)
  • @DateTimeFormat注解

    前言 前言在使用@DateTimeFormat进行格式化注解时,总是不能匹配前端传入的。格式总是报错 我这里使用的是pattern进行解析的的但是前端是给我传入的ISO类型的导致不能匹配所以总是报错。后来我们进行查看源码得到了答案。 源码解析 看下源码解析: 那么我们来看下。后端使

    2023年04月08日
    浏览(33)
  • 记一次DateTimeFormat注解的坑

    背景 :在用Echarts做图表时,前端传两个日期参数,获取日期区间的图表数据。想遵循RESTful风格,所以使用get请求获取date参数。前端读取当前日期,将七天前日期和当前日期作为参数传给后端,后端通过Date参数接收。然后后端报错,无法识别前端的date参数。经查阅,可以通

    2024年01月19日
    浏览(39)
  • SpringBoot复习(30):@DateTimeFormat注解的使用

    一、实体类 二、控制器类:

    2024年02月13日
    浏览(39)
  • 一文了解Jackson注解@JsonFormat及失效解决

    项目中使用 WRITE_DATES_AS_TIMESTAMPS: true 转换日期格式为时间戳未生效。如下: 尝试是否关于时间的注解是否会生效,使用 @JsonForma 和 @JsonFiled 均失效。 @JsonFormat是用于指定Java对象序列化为JSON字符串时的格式化方式的注解。如果@JsonFormat失效,可能是以下原因: 未正确导入Jac

    2024年02月06日
    浏览(30)
  • Spring @DateTimeFormat日期格式化时注解浅析分享

    关于它 @DateTimeFormat : 可以接收解析前端传入字符时间数据; 不能格式化接收的字符时间类型数据,需要的转换格式得配置; 入参格式必须与后端注解格式保持一致,否则会报错; 场景:跟前端交互时,接收字符类型的时间值,就需要使用 @DateTimeFormat 注解来解析,否则就

    2024年02月03日
    浏览(33)
  • SpringBoot自定义Jackson注解,实现自定义序列化BigDecimal(增强JsonFormat注解)

    在处理BigDecimal字段的时候,希望自定义序列化格式。虽然有 JsonFormat可以自定义格式,但是还是不够,JsonFormat不能对 BigDecimal 进行个性化处理,比如指定的RoundingMode。 现在就是需要有个注解,可以实现自定序列化BigDecimal类型 首先,自定义一个注解 BigDecimalFormatter 实现一个

    2024年02月09日
    浏览(41)
  • 【毕设必备】手把手带你用Python搭建一个简单的后端服务- API的创建,前后端交互的数据传递,GET,POST,JSON,FLASK

    Python是一种 流行 的高级编程语言,具有易于学习和使用的特性,被广泛应用于各种领域。 简单易学 :Python的语法清晰简洁,易于理解和学习。与其他编程语言相比,Python的语法设计非常直观,使得编程新手也能快速上手。 强大的标准库和丰富的第三方库 :Python拥有一个庞

    2024年02月04日
    浏览(174)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包