問題描述
前端傳yyyy-MM-dd hh:mm:ss格式的時間其實是String類型導致JavaBean中的Date類型Setter報錯,從而導致api請求400.
問題解決
我的解決方式:
在對應的實體類的對應的非字符串類型的變量的setter方法中傳入string類型的,然后在里邊用SimpleDateFormat或者Integer進行轉化
public void setReleaseEndTime(String str) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date releaseEndTime;
try {
releaseEndTime = sdf.parse(str);
this.releaseEndTime = releaseEndTime;
} catch (ParseException e) {
e.printStackTrace();
}
}
網上有:
-
1、把實體類的javabean里邊的類型都改成string類型了,在配置SQL語句時用數據庫函數to_date或者to_number轉化的,如果再java中用到這個字符串類型的日期的話,有必要的話,就用For format=new SimpleDateFormat("yyyy-MM-dd"),format.parse()來轉換。
-
2、還可以在實體類中定義Date和int類型對應的字符串類型成員變量,這樣前台的表單中field或者name與之對應上即可,這樣也成功轉成實體類了,不過轉成之后,得在java中把它字符串類型的轉成對應的Date或者int類型賦給相應的成員變量即可。
-
3、最后還有一種方法,就是實體類的日期屬性上加@DateTimeFormat(pattern="yyyy-MM-dd")注解,大部分是可以成功使用的。如果這種方法不可用的話,你看繼續嘗試如下方法:不過這個前提是前台穿過的日期為json形式而非字符串形式,如前台類似$("#id").val()來獲取日期直接傳給后台的話是不行的,你需要在前台引入JSON官網的json.js庫或者引入jQuery的jquery.json-2.4.js庫,然后如果是前者的話就new Date(stringDate).parseJSON()來轉化再傳給后台,如果是后者的話,$.toJSON(new Date(stringdate))來傳給后台,這種方式比較麻煩,有網友留言特意討論了一下這個問題,所以建議采用第一種方式。
參考文檔:
SpringMVC中出現" 400 Bad Request "錯誤(用@ResponseBody處理ajax傳過來的json數據轉成bean)的解決方法