文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java关于后端怎么去接收Date、LocalDateTime类型的参数

2023-08-17 06:33

关注

Date类型后端入参的格式默认为2019/01/18 11:11:11

1.1、Get方式传参

Get方式传参 是 没有时区的影响的

@JsonFormat的作用: 返回给前端的时间是经过@JsonFormat格式化的时间。

@DateTimeFormat的作用: 前端需要按照@DateTimeForma的格式进行传参

示例:

Date 类型直接作为参数的情况

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

Date类型属性的实体类作为参数的情况

public class DateTestVO {    private Date finishDate;}@RequestMapping(value = "/test2",method = RequestMethod.GET)@ResponseBodypublic void test2(DateTestVO vo){    System.out.println(vo);    System.out.println(vo.getFinishDate());    return vo;}

实体类中没有使用注解的时候

使用的是默认格式的入参:http://localhost:8080/test2?finishDate=2019/01/18 11:11:11打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019}Fri Jan 18 11:11:11 CST 2019返回的是没有经过格式化的时间:{    "finishDate": "2019-01-18T03:11:11.000+0000"}

实体类中使用@JsonFormat注解的时候

@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)

使用的是默认格式的入参:http://localhost:8080/test2?finishDate=2019/01/18 11:11:11打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019}Fri Jan 18 11:11:11 CST 2019返回@JsonFormat格式的时间:{    "finishDate": "2019-01-18 11:11:11"}

实体类中使用@JsonFormat和@DateTimeFormat注解的时候

@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)

使用@DateTimeFormat格式的入参:http://localhost:8080/test2?finishDate=2019-01-18 11:11:11打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019}Fri Jan 18 11:11:11 CST 2019返回@JsonFormat格式的时间:{    "finishDate": "2019-01-18 11:11:11"}

1.2、POST方式传参

有时区的影响

@JsonFormat的作用:

后台接收后,没有时区的影响

返回给前端是格式化的时间

后端的入参按照@JsonFormat的格式传参(并没有使用@DateTimeFormat来格式化后端的入参)

示例:

public class DateTestVO {    private Date finishDate;}@RequestMapping(value = "/test3",method = RequestMethod.POST)@ResponseBodypublic DateTestVO test3(@RequestBody DateTestVO vo){    System.out.println(vo);     System.out.println(vo.getFinishDate());    return vo;}

实体类中没有使用注解的时候

入参:{    "finishDate": "2019-01-18"}打印日志,多了8个小时:DateTestVO{finishDate=Fri Jan 18 08:00:00 CST 2019}Fri Jan 18 08:00:00 CST 2019返回结果,没有多出8个小时、没有格式化的时间:{    "finishDate": "2019-01-18T00:00:00.000+0000"} 
入参:{    "finishDate": "2019-01-18T11:11:11"}打印日志,多了8个小时:DateTestVO{finishDate=Fri Jan 18 19:11:11 CST 2019}Fri Jan 18 19:11:11 CST 2019返回结果,没有多出8个小时、没有格式化的时间:{    "finishDate": "2019-01-18T11:11:11.000+0000"}

实体类中使用@JsonFormat注解的时候

public class DateTestVO {    //@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")    private Date finishDate;}@RequestMapping(value = "/test3",method = RequestMethod.POST)@ResponseBodypublic DateTestVO test3(@RequestBody DateTestVO vo){    System.out.println(vo);     System.out.println(vo.getFinishDate());    return vo;}

注解为:
@JsonFormat(pattern = “yyyy-MM-dd”,timezone=“GMT+8”)

入参:{    "finishDate": "2019-01-18"}打印日志,正常:DateTestVO{finishDate=Fri Jan 18 00:00:00 CST 2019}Fri Jan 18 00:00:00 CST 2019返回@JsonFormat格式的时间:{    "finishDate": "2019-01-18"}

注解为:
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)

入参:{    "finishDate": "2019-01-18 11:11:11"}打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019}Fri Jan 18 11:11:11 CST 2019返回@JsonFormat格式的时间:{    "finishDate": "2019-01-18 11:11:11"}

总结:

为了同时照顾GET、POST方式,@JsonFormat、@DateTimeForma都使用。

LocalDateTime 在GMT+8 默认格式为 yyyy-MM-ddTHH:mm:ss,如 2021-01-01T10:15:12

2.1、GET方式传参

public class DateTestVO {    //出参的格式化    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")    //入参的格式化    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")    private Date finishDate;    //入参的格式化    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")    private LocalDateTime overDate;}    @RequestMapping(value = "/test2",method = RequestMethod.GET)    @ResponseBody    public DateTestVO test2(DateTestVO vo){        System.out.println(vo);        System.out.println(vo.getFinishDate());        System.out.println(vo.getOverDate());        return vo;    }

overDate使用注解:
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)

入参:http://localhost:8080/test2?finishDate=2019-01-18 11:11:11&overDate=2019-01-18 11:11:11打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019, overDate=2019-01-18T11:11:11}Fri Jan 18 11:11:11 CST 20192019-01-18T11:11:11返回结果,overDate是未格式化的时间:{    "finishDate": "2019-01-18 11:11:11",    "overDate": "2019-01-18T11:11:11"}

overDate使用注解:
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)

入参:http://localhost:8080/test2?finishDate=2019-01-18 11:11:11&overDate=2019-01-18 11:11:11打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019, overDate=2019-01-18T11:11:11}Fri Jan 18 11:11:11 CST 20192019-01-18T11:11:11返回结果,正常:{    "finishDate": "2019-01-18 11:11:11",    "overDate": "2019-01-18 11:11:11"}

2.2、POST方式传参

public class DateTestVO {    //出参的格式化    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")    //入参的格式化    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")    private Date finishDate;    private LocalDateTime overDate;}   @RequestMapping(value = "/test3",method = RequestMethod.POST)    @ResponseBody    public DateTestVO test3(@RequestBody DateTestVO vo){        System.out.println(vo);        System.out.println(vo.getFinishDate());        System.out.println(vo.getOverDate());        return vo;    }
入参,overDate里边包含了T:{    "finishDate": "2019-01-18 11:11:11",    "overDate": "2019-01-18T11:11:11"}打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019, overDate=2019-01-18T11:11:11}Fri Jan 18 11:11:11 CST 20192019-01-18T11:11:11返回结果,overDate包含T:{    "finishDate": "2019-01-18 11:11:11",    "overDate": "2019-01-18T11:11:11"}

overDate使用注解:
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)

入参:{    "finishDate": "2019-01-18 11:11:11",    "overDate": "2019-01-19 11:11:11"}打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019, overDate=2019-01-19T11:11:11}Fri Jan 18 11:11:11 CST 20192019-01-19T11:11:11返回结果,正常:{    "finishDate": "2019-01-18 11:11:11",    "overDate": "2019-01-19 11:11:11"}

overDate使用注解:
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)

入参:{    "finishDate": "2019-01-18 11:11:11",    "overDate": "2019-01-18 11:11:11"}打印日志,正常:DateTestVO{finishDate=Fri Jan 18 11:11:11 CST 2019, overDate=2019-01-18T11:11:11}Fri Jan 18 11:11:11 CST 20192019-01-18T11:11:11返回结果,正常:{    "finishDate": "2019-01-18 11:11:11",    "overDate": "2019-01-18 11:11:11"}

SpringBoot 中LocalDateTime日期格式化:
https://blog.csdn.net/w851685279/article/details/114685542

有问题,请多多指正!

来源地址:https://blog.csdn.net/bluede2015/article/details/129695451

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯