post提交參數有Date類型,老是返回400格式錯誤

post提交參數有addtime時,老是返回400錯誤。java

將參數改成addTime時,就能正常提交了。ajax

嘗試了各類方法,糾結了很久仍是沒搞定,以前猜想試addtime是關鍵字致使的不能提交,後來測試,addtime是能夠提交的。spring

通過不斷嘗試終於找到了緣由:spring mvc 在接收日期類型參數時,如不作特殊處理 會出現400語法格式錯誤json

解決辦法:mvc

咱們在SpringMVC開發中,可能遇到比較多的問題就是前臺與後臺實體類之間日期轉換處理的問題了,說問題也不大,但不少人開發中常常會遇到這個問題,有時很使人頭疼,有時間問題暴露的不是很明顯,而後逐漸對問題進行跟蹤,會發現是日期類型轉換失敗「映射」不到對應的持久類的日期屬性上形成的,由此我還特地寫過一篇博文:SpringMVC中出現" 400 Bad Request "錯誤(用@ResponseBody處理ajax傳過來的json數據轉成bean)的解決方法。感興趣的碼農能夠看一看,總結了常見形成springMVC出現「400 Bad Request」錯誤的七大緣由,其中就有前臺的字符串日期類型與後臺的java日期類型匹配不上形成的。jsp

       今天晚上呢,特地抽出寶貴的時間來總結概括出一下解決這個問題的三大方法,分享給你們,以幫助更多像我同樣的人。鄙人不才,若是過程當中有講解的不清或者不對的地方,還望認真閱讀的您,留下你的寶貴意見或建議,以便您,我,還有你們更快更好的共同進步!post

       好了,咱們切入正題吧!測試

方法一:實體類中加日期格式化註解

  1. @DateTimeFormat(pattern = "yyyy-MM-dd")  
  2. private Date receiveAppTime;  

如上,在對應的屬性上,加上指定日期格式的註解,本人親自測試過,輕鬆解決問題!spa

 

方法二:控制器Action中加入一段數據綁定代碼

  1. @InitBinder  
  2. public void initBinder(WebDataBinder binder) {  
  3. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
  4. dateFormat.setLenient(false);  
  5. binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));   //true:容許輸入空值,false:不能爲空值  


方法三:實現一個全局日期類型轉換器並進行配置

         此方法較爲複雜,請詳細查看本人的這篇博文:SpringMVC配置全局日期轉換器,處理日期轉換異常.net

 

附加方法四:適合頁面把日期類型轉換成字符串且JSP,Freemark頁面

JSP模版引擎方法:

  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>   
  2. <fmt:formatDate value="${job.jobtime }" pattern="yyyy-MM-dd HH:mm:ss"/>  

Freemarker模版引擎方法: 

    1. <input id="receiveAppTime" name="receiveAppTime" type="text" value="${(bean.receiveAppTime?string('yyyy-MM-dd'))!}" />  
相關文章
相關標籤/搜索