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