使用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 @Override
49 public String toString() {
50 return "User [createDate=" + createDate + ", userId=" + userId
51 + ", 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 @Controller
15 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 @Override
53 public String toString() {
54 return "User [createDate=" + createDate + ", userId=" + userId
55 + ", userName=" + userName + "]";
56 }
57 }

这样也可以解决日期格式报400问题。而且不管页面是否有数据都可以正常使用。

转自 SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法

SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法的更多相关文章

  1. SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法

    系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 使用SpringMVC ...

  2. SpringMVC:提交日期类型报400错误解决方法

    方法1:可以使用@ControllerAdvice增强Controller @ControllerAdvice public class BaseControllerAdvice { // 初始化绑定 ...

  3. ajax post提交form表单 报400错误 解决方法

    昨天晚上做项目遇到了一个奇怪的问题,我用ajax提交一个form表单,后台Java方法用的是一个实体接,但是他根本不进方法体中,直接给我一个400的错误,一开始我以为是我路径的问题(尴尬),结果直接访 ...

  4. 如何自定义JSTL标签与SpringMVC 标签的属性中套JSTL标签报错的解决方法

    如何自定义JSTL标签 1.创建一个类,从SimpleTagSupport继承 A) 通过继承可以获得当前JSP页面上的对象,如JspContext I) 实际上可以强转为PageContext II ...

  5. VS2010升级VS2013后,出现没有定义类型“PowerPacks.ShapeContainer”错误解决方法

    开发说明: http://msdn.microsoft.com/zh-tw/library/microsoft.visualbasic.powerpacks.aspx Microsoft.Visual ...

  6. 提交代码出现 Push to origin/master was rejected 错误解决方法

    转至博客:http://www.xtyos.cn/archives/qt-1-index 为什么会出现这样的问题 一般发生在 GitHub 或 码云 刚刚创建仓库第一次pull的时候,两个仓库的差别非 ...

  7. NGINX不允许向静态文件提交POST方式的请求,否则报405错误(apache中没有出现)

    telnet *.*.*.* 80POST /map/navigation/2011winter/jsn/jsn_20120723_pack/pvf.jsnHTTP/1.1Host:*.*.*.* ( ...

  8. Spring MVC的各种参数绑定方式(请求参数用基础类型和包装类型的区别)(转)

    1.基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int cou ...

  9. SpringMVC在使用Jackson2时关于日期类型格式化的问题

    SpringMVC在使用Jackson2时关于日期类型格式化的问题 如果无效,那么使用 @DateTimeFormat(pattern = "yyyy-MM-dd")

随机推荐

  1. 浅析文本挖掘(jieba模块的应用)

    一,文本挖掘 1.1,什么是文本挖掘 文本挖掘是指从大量文本数据中抽取事先未知的,可理解的,最终可用的知识的过程,同时运用这些知识更好的组织信息以便将来参考 1.2,文本挖掘基本流程 收集数据 数据集 ...

  2. 数据库介绍(MySQL安装 体系结构、基本管理)

    第1章 数据库介绍及mysql安装 1.1 数据库简介 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增.截取.更新.删除等操作. 所谓“数据库”系以一定方式 ...

  3. webrtc视频数据接收端处理流程详解

  4. Nginx限速模块初探

    Nginx限速模块分为哪几种?按请求速率限速的burst和nodelay参数是什么意思?漏桶算法和令牌桶算法究竟有什么不同?本文将带你一探究竟.我们会通过一些简单的示例展示Nginx限速模块是如何工作 ...

  5. 自动化运维工具——puppet详解(二)

    一.class 类 1)什么是类? 类是puppet中命名的代码模块,常用于定义一组通用目标的资源,可在puppet全局调用: 类可以被继承,也可以包含子类: 具体定义的语法如下: class NAM ...

  6. keeplived日志位置指定

    作为一个运维DBA,除了关心数据库的关键指数.还得往架构和底层基础知识多靠拢. 2010年刚工作的时候,那会Cacti监控比較流行吧.可恶的是SNMP会把默认日志写到系统日志文件中面,导致排错时非常受 ...

  7. mysql本地訪问linuxserver,出现SQLSTATE[HY000] [1130] Host &#39;127.0.0.1&#39; is not allowed to connect to this

    解决方式:网上看了说.更改mysql库的user表,加入一条host为%的数据就能够.可是还是不行. 后来,直接登录mysql.给訪问加权限就能够了. 运行 [root@iZ25p77kem7Z ~] ...

  8. 《Effective Modern C++》翻译--简单介绍

    北京时间2016年1月9日10:31:06.正式開始翻译.水平有限,各位看官若有觉得不妥之处,请批评指正. 之前已经有人翻译了前几个条目,有些借鉴出处:http://www.cnblogs.com/m ...

  9. 【分享】iTOP4412开发板-Bluetooth移植文档

    [分享]iTOP4412开发板-Bluetooth移植文档 最近须要把Bluetooth移植到iTOP-4412 开发平台.查阅了相关资料,经过一段时间的研究.调试,最终成功的将蓝牙功能移植到了开发板 ...

  10. 假设不小心改动了系统SDK文件,编译无法通过改怎么办?(iOS开发)

     project报例如以下错误: fatal error: file '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimul ...