Java前端实现发送date类型的参数给后端

 更新时间:2025年06月24日 08:59:59   作者:yololee_  
这篇文章主要介绍了Java前端实现发送date类型的参数给后端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

@DateTimeFormat

第一次:Get方式传参-成功

这个时候是用的get请求方式,get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应

/**
     * http://localhost:8080/intoParam?date=2019-01-18 11:11:11
     */
    @RequestMapping(value = "/intoParam",method = RequestMethod.GET)
    @ResponseBody
    public void intoParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date date){
        System.out.println(date);//Fri Jan 18 08:00:00 CST 2019
    }

第二次:Post方式传参-失败

/**
     * http://localhost:8080/intoParam
     * 请求体
     * {
     *     "date":"2019-01-18 11:11:11"
     * }
     */
    @RequestMapping(value = "/intoParam",method = RequestMethod.POST)
    @ResponseBody
    public void intoParam2(@RequestBody DateVo dateVo){
        System.out.println(dateVo.getDate());//Fri Jan 18 08:00:00 CST 2019
    }

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateVo {

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

错误信息:

{
    "timestamp": "2021-10-19T07:05:22.407+0000",
    "status": 400,
    "error": "Bad Request",
    "message": "JSON parse error: Cannot deserialize value of type `java.util.Date` from String \"2019-01-18 11:11:11\": not a valid representation (error: Failed to parse Date value '2019-01-18 11:11:11': Cannot parse date \"2019-01-18 11:11:11\": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null)); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.util.Date` from String \"2019-01-18 11:11:11\": not a valid representation (error: Failed to parse Date value '2019-01-18 11:11:11': Cannot parse date \"2019-01-18 11:11:11\": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null))\n at [Source: (PushbackInputStream); line: 2, column: 12] (through reference chain: com.mye.hl20springbootdataparam.vo.DateVo[\"date\"])",
    "path": "/intoParam"
}

第三次:post传参-成功

/**
     * http://localhost:8080/intoParam
     * 請求體是:
     * {
     *     "date":"2019-01-18"
     * }
     */
    @RequestMapping(value = "/intoParam",method = RequestMethod.POST)
    @ResponseBody
    public void intoParam2(@RequestBody DateVo dateVo){
        System.out.println(dateVo.getDate());//Fri Jan 18 08:00:00 CST 2019
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String format = sdf.format(dateVo.getDate());
        System.out.println(format);//2019-01-18
    }

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateVo {

    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date date;
}

原因:

springboot默认采用jackson,而jackson只能识别以下几种日期格式

"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
 
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
 
"yyyy-MM-dd";
 
"EEE, dd MMM yyyy HH:mm:ss zzz";
 
long类型的时间戳(毫秒时间戳)

解决方法:

  • 采用long时间戳,如:1537191968000
  • 在传参的对象上加上@JsonFormat注解并且指定时区
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")

第四次:post传参-成功

/**
     * http://localhost:8080/intoParam
     * 請求體是:
     * {
     *     "date":"2019-01-18 11:11:11"
     * }
     */
    @RequestMapping(value = "/intoParam",method = RequestMethod.POST)
    @ResponseBody
    public void intoParam2(@RequestBody DateVo dateVo){
        System.out.println(dateVo.getDate());//Fri Jan 18 11:11:11 CST 2019
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String format = sdf.format(dateVo.getDate());
        System.out.println(format);//2019-01-18 11:11:11
    }

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateVo {

    @DateTimeFormat(pattern="yyyy-MM-dd")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date date;
}

@jsonFormat

@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”)
  • pattern:是你需要转换的时间日期的格式
  • timezone:是时间设置为东八区,避免时间在转换中有误差
  • @JsonFormat注解可以在属性的上方,同样可以在属性对应的get方法上,两种方式没有区别
/**
     *http://localhost:8080/outParam
     */
    @RequestMapping(value = "/outParam",method = RequestMethod.GET)
    @ResponseBody
    public DateVo intoParam2(){
       return new DateVo(new Date());
    }

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateVo {

//    @DateTimeFormat(pattern="yyyy-MM-dd")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date date;
}

展示结果:

{
	"date": "2021-10-19 15:44:51"
}

总结

前端Content-Type 为application/json的请求时,我们使用@JsonFormat来进行转化,如果为表单,则应该使用@DateTimeFormat

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java获取指定开始时间与结束时间之间的所有日期

    java获取指定开始时间与结束时间之间的所有日期

    这篇文章主要为大家详细介绍了java获取指定开始时间与结束时间之间的所有日期,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • SpringBoot项目War包部署无法注册到Nacos中的解决

    SpringBoot项目War包部署无法注册到Nacos中的解决

    这篇文章主要介绍了SpringBoot项目War包部署无法注册到Nacos中的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java实现自定义自旋锁代码实例

    Java实现自定义自旋锁代码实例

    这篇文章主要介绍了Java实现自定义自旋锁代码实例,Java自旋锁是一种线程同步机制,它允许线程在获取锁时不立即阻塞,而是通过循环不断尝试获取锁,直到成功获取为止,自旋锁适用于锁竞争激烈但持有锁的时间很短的情况,需要的朋友可以参考下
    2023-10-10
  • MybatisPlus #{param}和${param}的用法详解

    MybatisPlus #{param}和${param}的用法详解

    这篇文章主要介绍了MybatisPlus #{param}和${param}的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 关于Java float和double精度范围大小

    关于Java float和double精度范围大小

    这篇文章主要介绍了关于Java float和double精度范围大小,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Cloud Config工作原理概述

    Spring Cloud Config工作原理概述

    Spring Cloud Config 是 Spring Cloud 生态系统的一部分,它提供了一种集中化管理应用配置的方法,本文给大家介绍Spring Cloud Config工作原理概述,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • Spring Core核心类库的功能与应用实践分析

    Spring Core核心类库的功能与应用实践分析

    本文详细介绍了SpringCore核心类库的功能、应用实践和底层原理,SpringCore提供了控制反转(IOC)、依赖注入(DI)、Bean管理以及JNDI、定时任务等企业级功能,文章通过多个Java示例展示了SpringCore的应用,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • Java使用注解实现BigDecimal的四舍五入

    Java使用注解实现BigDecimal的四舍五入

    BigDecimal是Java中的一个类,位于java.math包中,它提供了任意精度的有符号十进制数字的表示,以及对这些数字进行算术运算的方法,本文介绍了Java使用注解实现BigDecimal的四舍五入的相关知识,需要的朋友可以参考下
    2024-09-09
  • java中为什么要谨慎使用Arrays.asList、ArrayList的subList

    java中为什么要谨慎使用Arrays.asList、ArrayList的subList

    这篇文章主要介绍了java中为什么要谨慎使用Arrays.asList、ArrayList的subList,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 深入了解Java.Util.Date详情

    深入了解Java.Util.Date详情

    这篇文章主要介绍了Java.Util.Date,很少有类能像java.util.Date那样在堆栈溢出方面引起如此多的类似问题,关于具体原因下文内容详细介绍,需要的朋友可以参考一下
    2022-06-06

最新评论