Java:@JsonFormat与@DateTimeFormat的关系

@JsonFormat
@JsonFormat是Jackson的注解,用来格式化序列化后的时间类型字段

不使用@JsonFormat格式化时间
public class User implements Serializable {
    private Date creatTime;
    ...
}

序列化结果:{"creatTime":1624606883374}
1
使用@JsonFormat格式化时间
public class User implements Serializable {
    @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
    private Date creatTime;
    ...
}
@DateTimeFormat
@DateTimeFormat是Spring的注解,用来转化Get请求中时间类型字段的传输

public class User implements Serializable {
    private Date createTime;
    ...
}

@Slf4j
@RestController
public class TestController {
    @GetMapping("/test")
    public void test(User user){
        log.info("{}",user);
    }
}
不使用@DateTimeFormat(会报BindException)
{
    "timestamp": "2021-06-28T07:59:08.990+0000",
    "status": 400,
    "error": "Bad Request",
    "errors": [
        {
            "codes": [
                "typeMismatch.user.createTime",
                "typeMismatch.createTime",
                "typeMismatch.java.util.Date",
                "typeMismatch"
            ],
            "arguments": [
                {
                    "codes": [
                        "user.createTime",
                        "createTime"
                    ],
                    "arguments": null,
                    "defaultMessage": "createTime",
                    "code": "createTime"
                }
            ],
            "defaultMessage": "Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'createTime'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2021-06-24'; nested exception is java.lang.IllegalArgumentException",
            "objectName": "user",
            "field": "createTime",
            "rejectedValue": "2021-06-24",
            "bindingFailure": true,
            "code": "typeMismatch"
        }
    ],
    "message": "Validation failed for object='user'. Error count: 1",
    "path": "/test"
}
使用@DateTimeFormat(正常获取)
public class User implements Serializable {
    @DateTimeFormat(pattern="yyyy-MM-dd")
    private Date createTime;
    ...
}
java mysql返回的日期格式化
 2019-07-26 10:46:00  admin 原创 1438
摘要:java mysql返回的日期格式化
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

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

一、@JsonFormat(locale = "zh" timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
二、@JsonFormat参数讲解
1.locale代表中国的意思:中国时间段
2.pattern写的就是对于数据库的时间段
yyyy代表-年
MM代表-月
dd代表-日
HH代表-时
mm代表分
ss代表-3.TimeZone
TimeZone 表示时区偏移量,也可以计算夏令时。
在操作 Date, Calendar等表示日期/时间的对象时,经常会用到TimeZone;因为不同的时区,时间不同。

那么timezone加上GMT+8什么意思呢?

GMT 就是格林威治标准时间的英文缩写(Greenwich Mean Time 格林尼治标准时间),是世界标准时间,gmt+8 是格林威治时间+8小时,中国所在时区就是gmt+8 。

 

posted @ 2022-04-20 17:41  梦幻&浮云%  阅读(393)  评论(0)    收藏  举报