精华内容
下载资源
问答
  • @JsonFormat @DateTimeFormat 的坑 在网上看了很多,大部分人就是简单的解释了一下作用,如下 -- @JsonFormat(timezone = "GMT+8",pattern="yyyy-MM-dd") timezone:时区,设置为东八区,避免时间在转换中有...

    在网上看了很多,大部分人就是复制粘贴解释,如下

    -- @JsonFormat(timezone = "GMT+8",pattern="yyyy-MM-dd")
    	timezone:时区,设置为东八区,避免时间在转换中有误差
    	pattern:要转换成的时间格式
    	说明:@JsonFormat注解,可以置于属性上方,也可以置于属性对应get方法上方。
    @JsonFormat:主要是后台到前台的时间格式的转换
    @DateTimeFormat:主要是前后到后台的时间格式的转换
    

    真的服了,真希望各位在发文章时能自己试试在发布,几个人发错了,一群人全都复制粘贴转载,错的人越来越多,害…
    今天在写接口时发现问题,前端传给后端的数据我用 @DateTimeFormat
    并没有得到我想要的类型数据
    直接贴图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到访问直接报错,原以为是会把数据的时分秒给截掉
    再看下面
    在这里插入图片描述
    访问成功!
    多次尝试后得出结论:

    1.@DateTimeFormat 并不会根据得到其属性 pattern 把前端传入的数据转换成自己想要的格式,而是将前端的String类型数据封装到Date类型;其次它的 pattern 属性是用来规范前端传入数据的格式
    2.@DateTimeFormat 它用于前端日期String数据提交封装到日期Date数据类型中
    

    @JsonFormat 测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到时间参数的时间被改成了 00:00:00,8时是时区问题。
    在这里插入图片描述
    放行后可以看到返回的数据被截取了,按照其 pattern 属性设置规则截取
    结论:

    1.@JsonFormat 会对前端传来的数据进行处理,按照其 pattern 属性定义把传入的数据多余的补0
    2.@JsonFormat 同样会对后端传给前端的数据进行处理,按照其 pattern 属性定义直接进行截取返回给前端
    

    总结:

    1.@JsonFormat 和 @DateTimeFormat 用于String类型对Date类型的封装
    2.@JsonFormat t同时会对后端数据传给前端Json字符串日期截取,
    	按照其 pattern 属性定义截取
    3.前端JSON字符串yyyy-MM-dd HH:mm:ss 类型想要封装给LocalDateTime类型
    	需要用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    4.Date类型前端不能直接传 yyyy-MM-dd HH:mm:ss 格式字符串,
    	但是可以直接传 yyyy-MM-dd 格式,数据库会存储带补全的时分秒数据
    

    暂时就是这样,菜鸡一个,如果有问题欢迎大家指正、交流!

    展开全文
  • 看到Format 很容易知道就是格式转换,那么,转换的场景只有两个:一、读库 查询数据库 返回时间类型的信息到前台。二:存库 前台传给后台,然后存数据库。不管是哪一种,根据业务需求,肯定会有时间格式 不一致问题...

    使用背景

       看到Format 很容易知道就是格式转换,那么,转换的场景只有两个:一、读库 查询数据库 返回时间类型的信息到前台。二:存库 前台传给后台,然后存数据库。不管是哪一种,根据业务需求,肯定会有时间格式 不一致问题,那么转换方法肯定不是唯一的。比如 mysql 有一个函数 DATE_FORMAT(),也可以是java实现转换(simpleDateFormat),这里就只说这两个注解,怎么用。

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

    注:@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

              pattern:是你需要转换的时间日期的格式

              timezone:是时间设置为东八区,避免时间在转换中有误差

    解决问题:后台到前台时间格式保持一致。注意 属性类型是Date

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

     解决问题:@DataFormAT主要是前后到后台的时间格式的转换

    拓展一下:关于mysql中 date、datetime、timestamp三者间的区别

    date和datetime、timestamp的区别
    date保存精度到天,格式为:YYYY-MM-DD
    datetime和timestamp精度保存到秒,格式为:YYYY-MM-DD HH:MM:SS

    datetime 和timestamp
    两者都是时间类型字段,格式都一致。两者主要有以下几点区别:


    datatime设置的是什么时间就是什么时间;timestamp则是把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。  

    占用存储空间不同。timestamp储存占用4个字节,datetime储存占用8个字节。

    可表示的时间范围不同。timestamp可表示范围:1970-01-01 00:00:00~2038-01-09 03:14:07,datetime支持的范围更宽1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

    索引速度不同。timestamp更轻量,索引相对datetime更快。

    如果数据库中类型为datetime,而返回类型是string类型。会出现 返回数据 会多出“.0” 例如:2019-10-16 17:57:35.0。

    这里贴一下 简单的java使用simpleDateFormat转换的工具类 

    public static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
    	public static Date strToDate(String dateTimeStr,String formatStr){
    		DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(formatStr);
    		DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
    		return dateTime.toDate();
    	}
    
    	public static String dateToStr(Date date,String formatStr){
    		DateTime dateTime = new DateTime(date);
    		return dateTime.toString(formatStr);
    	}
    
    	public static Date strToDate(String dateTimeStr){
    		DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT);
    		DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
    		return dateTime.toDate();
    	}
    
    	public static String dateToStr(Date date){
    		DateTime dateTime = new DateTime(date);
    		return dateTime.toString(STANDARD_FORMAT);
    	}
    
    	/**
    	 * 由时间戳转为YYYY-MM-DD格式的日期
    	 * @param time
    	 */
    	public static String getYmdDate3(long time){
    		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(STANDARD_FORMAT);
    		return simpleDateFormat.format(new Date(Long.valueOf(time)));
    	}

     

     

     

    展开全文
  • 2.@JsonFormat注解 @DateTimeFormat的区别 (1)@JsonFormat注解是Jackson的注解, Spring MVCSpring Boot的默认 json解析器便是 Jackson;@DateTimeFormat注解是spring的注解。 (2)@DateTimeFormat注解只接收...

    1.问题

    平时在开发中前后端交互经常遇到两个问题:

    • 1. 后端给前端返数据时,moudel对象里的Date属性,需要格式化后给前端展现(比如:格式化成yyyy-MM-dd HH:mm:ss)。
    • 2. 前端给后端接口传参数时,格式化的时间字符串(比如:createTime="2020-11-29 20:10:11")需要转化成后端moudel对象里Date属性。

    解决这两个问题有两种方式:

    • 1. 手动格式化处理:比如,每次返给前端的数据使用SimpleDateFormat将Date转化成指定格式的字符串,接受参数也一样。这种方式会在只要有Date类型交互的接口处都要手动转化,繁琐、代码冗余。
    • 2. 使用注解:@JsonFormat 和 @DateTimeFormat,两者的使用方式和区别有所不同。

    2.@JsonFormat注解 和 @DateTimeFormat的区别

    • (1)@JsonFormat注解是Jackson的注解, Spring MVC和Spring Boot的默认 json解析器便是 Jackson;@DateTimeFormat注解是spring的注解。

    • (2)@DateTimeFormat注解只接收处理 前端form表单post请求里键值对有时间的参数转换;@JsonFormat注解只能处理标准的post请求(Content-type=application/json)里的时间转换。

    (1)form表单的键值对请求

    表单post请求包含两种:Content-type=application/x-www-form-urlencoded 和 Content-type=multipart/form-data,前端用表单post请求时,接口参数上不需要加@RequestBody注解,参数直接从表单的key/value中获取。

    @RestController
    public class LearnDataController{
        @PostMapping("/learn/data/get/userInfo")
        public void userInfo(UserInfo userInfo) throws Exception {
            System.out.println(userInfo);
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(userInfo);
            System.out.println(json);
        }
    }
    @Data
    public class UserInfo implements Serializable {
        private Long id;
        private String name;
        private Integer age;
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date birthDate;
    }
    
    //注意:表单类型的post请求时,后端Controller接口不需要加@RequestBody注解,参数UserInfo里的时间属性只能用@DateTimeFormat来规定接收的时间格式。

    (2)标准json格式的post请求

    前端发送标准的post请求时(即Content-type=application/json),需要在参数上增加@RequestBody这个注解,说明参数是从http的requestbody中获取的。

    @RestController
    public class LearnDataController{
        @PostMapping("/learn/data/get/userInfo")
        public void userInfo(@RequestBody UserInfo userInfo) throws Exception {
            System.out.println(userInfo);
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(userInfo);
            System.out.println(json);
        }
    }
    //标准的post请求时(Content-type=application/json),需要加@RequestBody从body里取参数。参数UserInfo里的时间属性,只能用@JsonFormat来接收指定时间格式的参数。
    @Data
    public class UserInfo implements Serializable {
        private Long id;
        private String name;
        private Integer age;
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT + 8")
        private Date birthDate;
    }

    (3)后端给前端返值

    当后端给前端传时间值时,只能用@JsonFormat返回指定格式字符给前端,@DateTimeFormat无法决定返回值的格式。因为spring反序列化默认用的Jackson框架。

    3.总结

    (1).前端 传给 后端
        当前端传来的是键值对(两种form表单post请求),用@DateTimeFormat 规定接收的时间格式。
        当前端传来json串,后台用@ReuqestBody接收,用@JsonFormat规定接收的时间格式。

    (2).后端 传给 前端
        后端返回给前端的时间值,只能用@JsonFormat返回指定格式字符给前端,@DateTimeFormat无法决定返回值的格式。

    (3).@JsonFormat 是jackson提供;@DateTimeFormat 由spring提供。

    #(1)@DateTimeFormat是spring的注解,目的是解决前端form表单提交的post请求时,规定接收的时间格式。
    
    #(2)form表单post请求有两种,当前端传来的参数有时间类型时,用@DateTimeFormat规定接收的时间格式。
        1)Content-type=application/x-www-form-urlencoded 它是表单默认的提交类型,基于key/value形式提交到服务端的。
        2)Content-type=multipart/form-data 它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。

    最后想聊点其它的,今天看了胡润百富榜里的企业家,过千亿的身价背后都是百亿、千亿级的负债。比如前段时间的蚂蚁金服,2万亿的贷款规模,里面有98%是干儿子的;再比如今年的地产谁不是干过了三条红线,基本都是盘子越大,负债越高。感慨呀,像我们这样的普通人,要想实现几代人的阶级跳跃,只有靠不断加杠杆加杠杆才有点可能。很多人这一辈子,也只有买房这一次机会可以得到加杠杆的条件,然而在选择首付和按揭时又失去了这次唯一的机会。

                                                                                                                     

                                                                                                              2020年11月29日  晚  于北京记

    展开全文
  • 一、@JsonFormat注解 1.引入依赖 <!--@JsonFormat依赖引入--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</...

    文章引用

    一、@JsonFormat注解

    1.引入依赖

    		<!--@JsonFormat依赖引入-->
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-annotations</artifactId>
    			<version>2.9.7</version>
    		</dependency>
    

    2.@JsonFormat注解的使用

    在属性上加注解@JsonFormat,其中参数:
    pattern:你想要其转换的日期格式
    timezone:是时间设置为东八区,避免时间在转换中差8个钟

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

    3.测试注解效果

     	@RequestMapping("timeTrans2")
        @ResponseBody
        public TestEntity timeTran2(){
            String name = "张三";
            Date studyDate = new Date();
            TestEntity entity = new TestEntity(name,studyDate);
            return entity;
        }
    
    //加注解返回结果
    {
     "name": "张三",
     "studyDate": "2020-06-08 14:26:41"
    }
    //不加注解返回结果
    {
     "name": "张三",
     "studyDate": "2020-06-08T06:26:19.335+0000"
    }
    

    4.结果分析

    @JsonFormat注解的作用,通过步骤3可见,其能将前端返回的时间按我们想要的日期格式传到后台,同时能设置时区,避免时间误差,未设置东八区的时间比我们系统时间慢了8个小时

    二、@DateTimeFormat注解

    1.@DateTimeFormat是Spring框架本身所有,所以对于Spring项目可以直接使用

    2.@DateTimeFormat注解的使用

     private String name;
    
       @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
       @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
       private Date studyDate;
    
       public TestEntity(String name, Date studyDate) {
           this.name = name;
           this.studyDate = studyDate;
       }
    

    3.测试注解效果

    @Controller
    @RequestMapping("/test/time")
    public class TestController {
         @RequestMapping("timeTrans")
         @ResponseBody
         public TestEntity test(TestEntity entity){
             return entity;
         }
     }
    

    postman测试,得到如下结果

    {
       "name": "张三",
       "studyDate": "2020-06-08 14:31:41"
    }
    

    如果注释注解@DateTimeFormat,前端传入则会会报错400,错误请求,原因是后端需要的是日期格式,但是前端给的是String,所以需要加注解@DateTimeFormat来将前端传来的String 转为 Date类型。

    注意:此处@JsonFormat也起到了时间传输的格式转换作用,如果注释该注解,将会得到如下结果:

    {
        "name": "张三",
        "studyDate": "2020-06-08T06:31:41.000+0000"
    }
    

    通过此结果可以看出,如果不加@JsonFormat注解,格式不是你想要的那种,同时时间也差了8个小时

    三、总结

    @JsonFormat注解的作用是格式化时间类型数据传输时的格式,以自己想要的格式来展示日期,同时也设置时区,避免时间展示与想要的结果产生误差。后端向前端传 , 时间格式–>想要的时间格式

    @DateTimeFormat注解作用则是将前端传来的字符串类型的日期转为后台需要的时间类型结果,不加此注解,请求会报错400,请求参数错误,对于此类错误要注意int类型数据传输也是一样。 前端向后端传 , 字符串时间–>时间格式

    展开全文
  • 前后数据交互过程中,Date类型的数据经常会出现类型映射转换的错误,为了达到业务的目标时间格式,通常会使用@JsonFormat @DateTimeFormat,但是这两者有什么区别呢? 目录一、示例代码 一、示例代码 先准备一...
  • @DateTimeFormat @JsonFormat 注解

    万次阅读 多人点赞 2018-08-01 22:52:06
    因为 @JsonFormat 注解不是 Spring 自带的注解,所以使用该注解前需要添加 jackson 相关的依赖包。当然,如果是 SpringBoot 项目就不需要自己手动添加依赖了,因为在 spring-boot-start-web 下已经包含了 jackson ...
  • 注解@JsonFormat(对外提供查询结果时使用) 使用场景案例:在对外提供接口时,数据库的时间字段begin_time的值,在数据库显示正常,结果一查询反馈给接口调用方的时间字段值的格式毕竟乱,这个时候需要在我们接口...
  • @JsonFormat和@DateTimeFormat的作用

    千次阅读 2018-09-13 17:30:09
    @DatetimeFormat是将String转换成Date,一般前台给后台传值时用 /** * 前台传后台时, 字符串自动封装成日期 */ @DateTimeFormat(pattern = &...@JsonFormat(pattern=”yyyy-MM-dd”) ...
  • @JsonFormat( pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8” ) 因为不是 Spring 自带的注解,所以使用该注解前需要添加 jackson 相关的依赖包(spring-boot-start-web 下已经包含了 jackson 相关依赖)...
  • 主要介绍了JsonFormat与@DateTimeFormat注解实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • @JsonFormat和@DateTimeFormat区别: 1.@JsonFormat 解释:该注解主要是处理后端返回给前端的日期字符串的格式 依赖的包: <groupId>com.alibaba</groupId> <artifactId>fastjson</...
  • 1.@DateTimeFormat注解 @DateTimeFormat注解在SpringMvc中一般是用在前端传时间格式字符串,然后后端用Date参数类型直接接收的场景。 一般是在SpringMvc的Controller层中参数前加上@RequestParam或者不加注解使用。 ...
  • 定义一个POJO,属性是一个Date类型的属性 @Data public class DateDTO { private Date date;...@JsonFormat 注解还要再加一个属性:timezone = “GMT+8” 总结 @DateTimeFormat是入参格式化的 @JsonFormat是出参格式化的
  • 就是 jackson 里的一个注解 @JsonFormat 这个注解 里面有一个属性pattern 他可以设置我们响应给前台的格式 例如 “yyyy-MM-dd” 这样就可以在响应JSON数据的时候按照自己写的格式 格式化时间. 就可以达到我们想要的...
  • 1、JsonFormat来源于jackson,Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象xml文档,同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少,简单易用并且性能也要相对...
  • @JsonFormat @JsonFormat ,使用该注解前需要添加 jackson 相关的依赖包 用于服务器传给前端json数据时对Date类型时间进行的格式化 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") pattern就...
  • @JsonFormat 后台=>前台 @DateTimeFormat 前后=>后台
  • @JsonFormat:用户后端日期数据格式化后传给前端。 @DateTimeFormat:用于格式化前端传递日期数据后传递给后端。 使用说明: @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") @DateTimeFormat(pattern = ...
  • 1、JsonFormat来源于jackson,Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象xml文档,同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少,简单易用并且性能也要相对...
  • @JsonFormat @DateTimeFormat的使用区别 1.@JsonFormat 用于后端从数据库里拿出来的时间传给前端的时间格式转换 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 2.@DateTimeFormat 用于前端...
  • 最近一朋友弟弟问我前端传日期参数后台接收报错怎么解决,其实这个问题很简单,一般简单数据类型前端传参请求头分为两种格式,第一种 application/x-www-form-urlencoded 表单形式,第二种application/json JSON格式...
  • @JsonFormat 跟 @DateTimeFormat 1.前端 传给 后端。 当前端传来的是键值对,用@DateTimeFormat 规定接收的时间格式。 重点 当前端传来json串,后台用@ReuqestBody接收,用@JsonFormat 规定接收的时间格式。 @...
  • @DateTimeFormat 控制入参 spring中,json格式不会走这里,其他格式可以正确转换成Date型数据,只要前端传来的格与pattern写法一致。...前后端传的数据都是json格式,@JsonFormat既可以控制入参也可以控制出参。 ...
  • 从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了这个问题,...
  • @JsonFormat用于后端传给前端的时间格式转换 这种以偏盖全的荒谬理论真的是误人子弟!为此本人将自己调查理解的浅陋见解分享给大家,如有错误请大家多多指教 @JsonFormat注解 出处: ...
  • 首先来数据库生成实体类的图: 有没有发现问题,没有的话,我来说一下,数据库中的create_time字段,在使用mybatis-plus自动代码生成工具生成的时候,它将数据库类型datetime转变成了LocalDateTime,都是时间类型...
  • 1.注解@JsonFormat 1)使用maven引入@JsonFormat所需要的jar包 &lt;dependency&gt; &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt; &lt;artifactId&gt;jackson-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,488
精华内容 2,195
关键字:

@jsonformat和@datetimeformat