国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

SpringMVC + Spring + MyBatis 學習筆記:提交數據遭遇基礎類型和日期類型報400錯誤解決方法

2019-11-14 23:33:52
字體:
來源:轉載
供稿:網友
SPRingMVC + Spring + MyBatis 學習筆記:提交數據遭遇基礎類型和日期類型報400錯誤解決方法

系統:WIN8.1

數據庫Oracle 11GR2

開發工具:MyEclipse 8.6

框架:Spring3.2.9、SpringMVC3.2.9、MyBatis3.2.8


使用SpringMVC開發的時候,頁面如果有日期格式的數據,后臺接受也是java.util.Date,則報告400錯誤。下面是解決方案的演示示例:

這個是實體類,里面createDate就是java.util.Date類型

 1 import java.util.Date; 2  3 public class User { 4  5     private int userId; 6     private String userName; 7     private Date createDate; 8      9     public User() {}10 11     public User(int userId, String userName, Date createDate) {12         super();13         this.userId = userId;14         this.userName = userName;15         this.createDate = createDate;16     }17 18     public User(String userName, Date createDate) {19         super();20         this.userName = userName;21         this.createDate = createDate;22     }23 24     public int getUserId() {25         return userId;26     }27 28     public void setUserId(int userId) {29         this.userId = userId;30     }31 32     public String getUserName() {33         return userName;34     }35 36     public void setUserName(String userName) {37         this.userName = userName;38     }39 40     public Date getCreateDate() {41         return createDate;42     }43 44     public void setCreateDate(Date createDate) {45         this.createDate = createDate;46     }47 48     @Override49     public String toString() {50         return "User [createDate=" + createDate + ", userId=" + userId51                 + ", userName=" + userName + "]";52     }53 }

頁面代碼

1   <form action="regUser" method="post">2         userName:<input type="text" name="userName"/><br>3         createDate:<input type="text" name="createDate"/><br>4         double類型:<input type="text" name="dd"/><br>5         <input type="submit" value="注冊">6     </form>

因為對于原生基本類型的form表單綁定,會出錯。需要指定具體的類型編輯器。用法如下:首先在BaseController中增加方法initBinder,并使用注解@InitBinder標注,那么spring mvc在綁定表單之前,都會先注冊這些編輯器。剩下的控制器都繼承該類。CustomDateEditor spring自己已經提供了。代碼如下:

 1 import java.text.SimpleDateFormat; 2 import java.util.Date; 3  4 import org.springframework.beans.propertyeditors.CustomDateEditor; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.WebDataBinder; 7 import org.springframework.web.bind.annotation.InitBinder; 8  9 import sun.beans.editors.DoubleEditor;10 import sun.beans.editors.FloatEditor;11 import sun.beans.editors.IntEditor;12 import sun.beans.editors.LongEditor;13 14 @Controller15 public class BaseController {16 17     @InitBinder    18     public void initBinder(WebDataBinder binder) {    19 20         binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); 21         binder.registerCustomEditor(int.class, new IntEditor());22         binder.registerCustomEditor(long.class, new LongEditor());  23         binder.registerCustomEditor(double.class, new DoubleEditor());  24         binder.registerCustomEditor(float.class, new FloatEditor());  25     }26     27     28 }

上面的代碼不僅僅有日期格式的編輯器,還有基礎類型的編輯器,這樣就解決了SpringMVC中controller方法接受參數的時候,基礎類型報錯的問題了。

下面是測試用代碼,繼承BaseController之后就可以直接運行了。接受的參數有實體類和基礎類型。

 1 import org.springframework.stereotype.Controller; 2 import org.springframework.web.bind.annotation.RequestMapping; 3  4 import com.kickstarter.entity.User; 5  6 @Controller("userController") 7 public class UserController extends BaseController{ 8  9     @RequestMapping(value="regUser")10     public String dateTest(User user ,double dd){11         12         System.out.println( user.toString() );13         System.out.println( dd );14         return "index"; 15     }16 }

以上,問題解決。然后我們切換第二種方式,刪除 BaseController這個類,直接在User實體類中的createDate字段上加上注解,注意第10行代碼:

 1 import java.util.Date; 2  3 import org.springframework.format.annotation.DateTimeFormat; 4  5 public class User { 6  7     private int userId; 8     private String userName; 9     10     @DateTimeFormat(pattern="yyyy-MM-dd")11     private Date createDate;12     13     public User() {}14 15     public User(int userId, String userName, Date createDate) {16         super();17         this.userId = userId;18         this.userName = userName;19         this.createDate = createDate;20     }21 22     public User(String userName, Date createDate) {23         super();24         this.userName = userName;25         this.createDate = createDate;26     }27 28     public int getUserId() {29         return userId;30     }31 32     public void setUserId(int userId) {33         this.userId = userId;34     }35 36     public String getUserName() {37         return userName;38     }39 40     public void setUserName(String userName) {41         this.userName = userName;42     }43 44     public Date getCreateDate() {45         return createDate;46     }47 48     public void setCreateDate(Date createDate) {49         this.createDate = createDate;50     }51 52     @Override53     public String toString() {54         return "User [createDate=" + createDate + ", userId=" + userId55                 + ", userName=" + userName + "]";56     }57 }

這樣也可以解決日期格式報400問題。而且不管頁面是否有數據都可以正常使用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛川县| 富裕县| 湘乡市| 紫金县| 永仁县| 南城县| 嵩明县| 武功县| 留坝县| 泗水县| 三河市| 垣曲县| 张家港市| 商城县| 商都县| 拉萨市| 修水县| 博湖县| 新绛县| 门源| 龙胜| 内乡县| 涟源市| 桂阳县| 南川市| 忻城县| 公安县| 华坪县| 嘉兴市| 波密县| 甘肃省| 高邑县| 建平县| 辽源市| 东乌珠穆沁旗| 辉县市| 拉孜县| 蓬莱市| 武夷山市| 甘泉县| 随州市|