前端向后端传递Date数据,后端有三种实现方式,@RequestBody注解、@RequestParam注解和不加注解。日期数据的形式也有两种,时间戳和日期字符串。
情况一:后端用@RequestBody注解标记。在这种情况下,Date又可以分两种数据存在方式:一种是单独作为接口的参数来传递,另外一种是作为参数对象属性来传递。
1.Date类型数据单独作为接口的参数传递。在默认情况(不实现任何日期转换接口或方法)下,前端向后端传递日期数据时,前端日期数据需要转换成时间戳,代码如下所示。如果前端向后端传的数据是日期字符串,会抛出相应的异常(Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('-' (code 45)): Expected space separating root-level values,我这里的日期格式是:“yyyy-MM-dd HH:mm:ss”)。如果在不实现任何日期转换接口或方法情况下,想要实现前端向后端传递日期字符串的功能,后端只能将日期类型参数封装到参数对象中,作为Date作为参数对象的属性来传递。
示例代码1 (Date单独作为接口的参数)
@Test
public void testRequestBodyDateTest() {
String params = "1608537480434";
String jsonStr = StringUtils.replaceSingleQuoteWithDouble(params);
this.postBody("/testRequestBodyDate/", jsonStr);
}
@PutMapping("/testRequestBodyDate/")
public CommonResult testRequestBodyDate(@RequestBody Date test){
logger.info("testRequestBodyDate");
return CommonResult.success(test);
}
2.Date类型数据作为参数对象属性传递。在默认情况(不实现任何日期转换接口或方法)下,前端的日期数据只能是日期字符串,代码如下所示。如果是时间戳,org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.Date` from String "1608537480434": not a valid representation (error: Failed to parse Date value '1608537480434': Unparseable date: "1608537480434");。
示例代码2 (Date作为参数对象属性)
@Test
public void testBodyTest() {
String params = "{intTest':1,'longTest':0,'dateTest':'2020-12-21 15:58:00'}";
String jsonStr = StringUtils.replaceSingleQuoteWithDouble(params);
this.postBody("/testRequestBody/", jsonStr);
}
@PostMapping("/testRequestBody/")
public CommonResult testBody(@RequestBody TestObject testObject){
logger.info("testBody");
return CommonResult.success(testObject);
}
情