完整报错:
2021-08-10 19:13:45.756 WARN 9104 --- [nio-9000-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.sql.Timestamp'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.sql.Timestamp] for value '1628179200000'; nested exception is java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]]
问题分析:前端利用JSON传到后端的时候,属于是String类型,但是后端是利用Timestamp接收的,所以他分析不出来这个String类型的。
所以想到可以后端接口用String接收,然后将String类型的在后端转换为Timestamp类型的再进行后续的过程。代码如下
Timestamp t1 = Timestamp.valueOf(workplantime);
Timestamp t2 = Timestamp.valueOf(planfinishtime);
但是,后端又报错 格式错误
java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
===========终于解决了 啊啊啊啊啊
问题分析:
Timestamp.valueOf(***)
这个valueOf函数的里面应该是"YYYY-MM-DD HH:mm:ss"这样的字符串,而我给他的的字符串是一长段数字'1628179200000',所以他自然会报错
解决办法
思考加查阅资料得,因此后端还是接收前端的String类型,然后将这个String类型转换为Long类型,可以将Long类型的13位毫秒时间撮变成Timestamp类型,代码如下
public String getberthplanList(QueryInfo queryInfo, String workplantime, String planfinishtime){
long time1 = Long.valueOf(workplantime);
long time2 = Long.valueOf(planfinishtime);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestart = df.format(time1);
Timestamp ts = Timestamp.valueOf(timestart);
String timeend = df.format(time2);
Timestamp te = Timestamp.valueOf(timeend);
return portService.getberthplanList(queryInfo,ts,te);
}