天天看點

@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請求

@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點

情況二:

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請求

@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點

報錯資訊:

@JsonFormat注解和@DateTimeFormat注解異同點

情況三:

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請求

@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點

情況四:

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請求

@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點

報錯資訊

@JsonFormat注解和@DateTimeFormat注解異同點

結論:

@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請求

@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點

報錯資訊

@JsonFormat注解和@DateTimeFormat注解異同點

情況二:

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請求

@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點

報錯資訊

@JsonFormat注解和@DateTimeFormat注解異同點

情況三:

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請求

@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點

情況四:

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請求

@JsonFormat注解和@DateTimeFormat注解異同點
@JsonFormat注解和@DateTimeFormat注解異同點

結論:

@DateTimeFormat注解

1、隻能格式化前端傳入的日期時間類型的參數,不能格式化後端傳給前端的日期時間類字段

2、僅支援前端使用表單鍵值對的請求送出方式,不支援Json格式的請求送出方式

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

4、适用get請求和post請求