@JsonFormat注解和@DateTimeFormat注解异同点

 

@JsonFormat注解和@DateTimeFormat注解异同点

 

基础知识:

HTTP请求和响应:key-value、请求体、Content-Type

Spring注解:@RequestParam、@RequestBody@ResponseBody

 

@JsonFormat注解

情况一:

1、使用LocalDateTime

2、post请求且请求体数据是json格式,返回值也为json格式

TestParam源码

package com.huajin.registerserver.controller;

import java.io.Serializable;
import java.time.LocalDateTime;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.huajin.common.util.Constant;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TestParam implements Serializable {
	
	static final long serialVersionUID = 2754207548498337771L;
	
	@JsonFormat(pattern = Constant.DATE_TIME_FORMAT)
	LocalDateTime registerTime;

}

TestController源码

package com.huajin.registerserver.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.huajin.common.domain.DataResponse;
import com.huajin.registerclient.common.enums.sys.ErrorCode;
import com.huajin.registerserver.annotation.WithoutLogin;

@RestController
@RequestMapping("/test")
public class TestController {
	
	@WithoutLogin
	@PostMapping("/test")
	public DataResponse<TestParam> test(@RequestBody TestParam testParam) {
		return DataResponse.<TestParam>create()
				                          .setRetcode(ErrorCode.SUCCESS.getCode())
		                                  .setMsg(ErrorCode.SUCCESS.getMessage())
                                          .setData(testParam);
	}

}

Postman请求

 

情况二:

1、使用LocalDateTime

2、post请求且请求数据是键值对格式,返回值也为json格式

TestParam源码

package com.huajin.registerserver.controller;

import java.io.Serializable;
import java.time.LocalDateTime;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.huajin.common.util.Constant;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TestParam implements Serializable {
	
	static final long serialVersionUID = 2754207548498337771L;
	
	@JsonFormat(pattern = Constant.DATE_TIME_FORMAT)
	LocalDateTime registerTime;

}

TestController源码

package com.huajin.registerserver.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.huajin.common.domain.DataResponse;
import com.huajin.registerclient.common.enums.sys.ErrorCode;
import com.huajin.registerserver.annotation.WithoutLogin;

@RestController
@RequestMapping("/test")
public class TestController {
	
	@WithoutLogin
	@PostMapping("/test")
	public DataResponse<TestParam> test(@RequestBody TestParam testParam) {
		return DataResponse.<TestParam>create()
				                          .setRetcode(ErrorCode.SUCCESS.getCode())
		                                  .setMsg(ErrorCode.SUCCESS.getMessage())
                                          .setData(testParam);
	}

}

Postman请求

报错信息:

情况三:

1、使用Date

2、post请求且请求体数据是json格式,返回值也为json格式

TestParam源码

package com.huajin.registerserver.controller;

import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.huajin.common.util.Constant;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TestParam implements Serializable {
	
	static final long serialVersionUID = 2754207548498337771L;
	
	@JsonFormat(pattern = Constant.DATE_TIME_FORMAT)
	Date registerTime;

}

TestController源码

package com.huajin.registerserver.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.huajin.common.domain.DataResponse;
import com.huajin.registerclient.common.enums.sys.ErrorCode;
import com.huajin.registerserver.annotation.WithoutLogin;

@RestController
@RequestMapping("/test")
public class TestController {
	
	@WithoutLogin
	@PostMapping("/test")
	public DataResponse<TestParam> test(@RequestBody TestParam testParam) {
		return DataResponse.<TestParam>create()
				                          .setRetcode(ErrorCode.SUCCESS.getCode())
		                                  .setMsg(ErrorCode.SUCCESS.getMessage())
                                          .setData(testParam);
	}

}

Postman请求

情况四:

1、使用Date

2、post请求且请求数据是键值对格式,返回值也为json格式

TestParam源码

package com.huajin.registerserver.controller;

import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.huajin.common.util.Constant;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TestParam implements Serializable {
	
	static final long serialVersionUID = 2754207548498337771L;
	
	@JsonFormat(pattern = Constant.DATE_TIME_FORMAT)
	Date registerTime;

}

TestController源码

package com.huajin.registerserver.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.huajin.common.domain.DataResponse;
import com.huajin.registerclient.common.enums.sys.ErrorCode;
import com.huajin.registerserver.annotation.WithoutLogin;

@RestController
@RequestMapping("/test")
public class TestController {
	
	@WithoutLogin
	@PostMapping("/test")
	public DataResponse<TestParam> test(TestParam testParam) {
		return DataResponse.<TestParam>create()
				                          .setRetcode(ErrorCode.SUCCESS.getCode())
		                                  .setMsg(ErrorCode.SUCCESS.getMessage())
                                          .setData(testParam);
	}

}

Postman请求

报错信息

结论:

@DateTimeFormat注解

1、能格式化前端传入的日期时间类型的参数,也能格式化后端传给前端的日期时间类字段

2、仅支持Json格式的请求提交方式,不仅支持前端使用表单键值对的请求提交方式

3、适用java.util.Date和 java.time.LocalDateTime

4、适用get请求和post请求

 

@DateTimeFormat注解

情况一:

1、使用LocalDateTime

2、post请求且请求体数据是json格式,返回值也为json格式

TestParam源码

package com.huajin.registerserver.controller;

import java.io.Serializable;
import java.time.LocalDateTime;

import org.springframework.format.annotation.DateTimeFormat;

import com.huajin.common.util.Constant;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TestParam implements Serializable {
	
	static final long serialVersionUID = 2754207548498337771L;
	
	@DateTimeFormat(pattern = Constant.DATE_TIME_FORMAT)
	LocalDateTime registerTime;

}

TestController源码

package com.huajin.registerserver.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.huajin.common.domain.DataResponse;
import com.huajin.registerclient.common.enums.sys.ErrorCode;
import com.huajin.registerserver.annotation.WithoutLogin;

@RestController
@RequestMapping("/test")
public class TestController {
	
	@WithoutLogin
	@PostMapping("/test")
	public DataResponse<TestParam> test(@RequestBody TestParam testParam) {
		return DataResponse.<TestParam>create()
				                          .setRetcode(ErrorCode.SUCCESS.getCode())
		                                  .setMsg(ErrorCode.SUCCESS.getMessage())
                                          .setData(testParam);
	}

}

Postman请求

报错信息

情况二:

1、使用Date

2、post请求且请求体数据是json格式,返回值也为json格式

TestParam源码

package com.huajin.registerserver.controller;

import java.io.Serializable;
import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;

import com.huajin.common.util.Constant;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TestParam implements Serializable {
	
	static final long serialVersionUID = 2754207548498337771L;
	
	@DateTimeFormat(pattern = Constant.DATE_TIME_FORMAT)
	Date registerTime;

}

TestController源码

package com.huajin.registerserver.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.huajin.common.domain.DataResponse;
import com.huajin.registerclient.common.enums.sys.ErrorCode;
import com.huajin.registerserver.annotation.WithoutLogin;

@RestController
@RequestMapping("/test")
public class TestController {
	
	@WithoutLogin
	@PostMapping("/test")
	public DataResponse<TestParam> test(@RequestBody TestParam testParam) {
		return DataResponse.<TestParam>create()
				                          .setRetcode(ErrorCode.SUCCESS.getCode())
		                                  .setMsg(ErrorCode.SUCCESS.getMessage())
                                          .setData(testParam);
	}

}

Postman请求

报错信息

情况三:

1、使用Date

2、post请求且请求数据是键值对格式,返回值也为json格式

TestParam源码

package com.huajin.registerserver.controller;

import java.io.Serializable;
import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;

import com.huajin.common.util.Constant;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TestParam implements Serializable {
	
	static final long serialVersionUID = 2754207548498337771L;
	
	@DateTimeFormat(pattern = Constant.DATE_TIME_FORMAT)
	Date registerTime;

}

TestController源码

package com.huajin.registerserver.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.huajin.common.domain.DataResponse;
import com.huajin.registerclient.common.enums.sys.ErrorCode;
import com.huajin.registerserver.annotation.WithoutLogin;

@RestController
@RequestMapping("/test")
public class TestController {
	
	@WithoutLogin
	@PostMapping("/test")
	public DataResponse<TestParam> test(TestParam testParam) {
		return DataResponse.<TestParam>create()
				                          .setRetcode(ErrorCode.SUCCESS.getCode())
		                                  .setMsg(ErrorCode.SUCCESS.getMessage())
                                          .setData(testParam);
	}

}

Postman请求

情况四:

1、使用LocalDateTime

2、post请求且请求数据是键值对格式,返回值为json格式

TestParam源码

package com.huajin.registerserver.controller;

import java.io.Serializable;
import java.time.LocalDateTime;

import org.springframework.format.annotation.DateTimeFormat;

import com.huajin.common.util.Constant;

import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TestParam implements Serializable {
	
	static final long serialVersionUID = 2754207548498337771L;
	
	@DateTimeFormat(pattern = Constant.DATE_TIME_FORMAT)
	LocalDateTime registerTime;

}

TestController源码

package com.huajin.registerserver.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.huajin.common.domain.DataResponse;
import com.huajin.registerclient.common.enums.sys.ErrorCode;
import com.huajin.registerserver.annotation.WithoutLogin;

@RestController
@RequestMapping("/test")
public class TestController {
	
	@WithoutLogin
	@PostMapping("/test")
	public DataResponse<TestParam> test(TestParam testParam) {
		return DataResponse.<TestParam>create()
				                          .setRetcode(ErrorCode.SUCCESS.getCode())
		                                  .setMsg(ErrorCode.SUCCESS.getMessage())
                                          .setData(testParam);
	}

}

Postman请求

结论:

@DateTimeFormat注解

1、只能格式化前端传入的日期时间类型的参数,不能格式化后端传给前端的日期时间类字段

2、仅支持前端使用表单键值对的请求提交方式,不支持Json格式的请求提交方式

3、适用java.util.Date和 java.time.LocalDateTime

4、适用get请求和post请求

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值