结论
这里先给个结论,实体类使用String 和 Date类型都可以,这里建议使用Date。
而前端请求dto,绝大多数情况使用String。
java实体类和DTO数据传输类
一般我们会创建一个类来接收从数据库查询到数据,方便我们java程序进行处理(进行运算或返回前端),这个类我们称为实体类。有时我们也会构建一个类用于接收前端请求参数,方便我们获取参数,并且有利于后期的维护,这个类我们称为dto类。
一般参数类型
Integer,String还有Date类型这三个类型是我们最为常见使用的数据类型。
至于我们为什么不使用int来作为参数或实体属性类型的原因,当我们有个参数为(0,1,空)时,当我们使用int类型我们就无法区分我们收到的数据是0还是空(这里是因为int会有默认初始值0,而Integer作为包装类型则会很好的区分null和0)。
Integer和String类型不用多说。关键就是时间类型。想必也有不少初学者和我一样,纠结到底是用String还是Date类型来修饰时间呢?
@JsonFormat和@DateTimeFormat
想必大家都见过这两个注解。照着字面意思来看,一个是json格式化,一个是时间格式化。
两个的具体作用体现在哪里呢?
@JsonFormat json格式化
当我们使用Date类型修饰时间属性时,我们基本是都会使用@JsonFormat注解。
Date类型的格式为:Wed May 19 16:53:56 CST 2021
而我们直接将Date属性通过son格式传递给前端其实是UTC格式即:2021-05-19T08:53:56.000+00:00
显然这不是我们想要的格式,这个时候我们就需要使用 @JsonFormat
注解来帮助我们格式化时间为我们需要的yyyy-MM-dd HH:mm:ss格式
@DateTimeFormat 入参格式化
想必我们经常会遇见到时间范围查询,前台传回yyyy-MM-dd HH:mm:ss格式的时间区间,我们要使用什么类型的呢?这里建议使用String类型进行接收。
这里有自己的测试结果:
前台dto使用Date类型时:
使用application/json类型数据传参:
@JsonFormat
注解会报错 JSON parse error(json解析异常)
@DateTimeFormat
不会报错,打印出来的格式为java Date类型格式Wed May 19 16:42:01 CST 2021
使用非application/json类型数据传参
@JsonFormat会出现Failed to convert from type [java.lang.String] to type [@com.fasterxml.jackson.annotation.JsonFormat java.util.Date]
@DateTimeFormat会出现Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.util.Date]
前台dto使用String类型时,是没有任何问题的。