最近刚学完 spring mvc ,遇到一个问题。就是当我表单有日期类型的数据(如出生日期)提交到后台控制器时;就发生了400error;400error用简短的话来说就是请求参数类型和后台接收参数类型对不上等。
我大概一猜就知道是因为日期类型参数的问题;下面总结了一些处理 springMVC 在接收date类型参数的处理。
====方法one
我们后台的参数用String先接收,再把string转成date。/**
* 新增员工
*
* @param empVo
* @return 返回成功标识
*/
@RequestMapping("/empAdd")
@ResponseBody //hireday 是前台表单传过来的日期
public String empAdd(EmpVo empVo, String hireday) {
//把字符串日期转成date格式
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition position1 = new ParsePosition(0);
Date hiredayDate = format.parse(hireday, position1);
//分别是入职日期和出生日期
empVo.setHireDay(hiredayDate);
// DateHelper.parseString(StringHelper.getBirAgeSex(empVo.getCardno()).get("birthday")
// 通过身份证获取出生日期
empVo.setBirthday( DateHelper.parseString(StringHelper.getBirAgeSex(empVo.getCardno()).get("birthday"),"yyyy-MM-dd"));
//状态
empVo.setStatus(1);
//默认密码
empVo.setPassword("123456");
emp.save(empVo);
return "success";
}
====方法two
实体类中加日期格式化注解
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date hireDay;//入职日期
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
public Date getHireDay() {
return hireDay;
}
====方法three(推荐)
控制器加入日期数据绑定方法
//将字符串转换为Date类
@InitBinder
public void initBinder(WebDataBinder binder, WebRequest request) {
//转换日期格式
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//注册自定义的编辑器
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
====方法four
实现全局日期类型转换器并进行配置
设计日期转换类
package com.xueqing.demo;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.support.WebBindingInitializer;
import org.springframework.web.context.request.WebRequest;
public class DateEdtor implements WebBindingInitializer {
public void initBinder(WebDataBinder binder, WebRequest request) {
// TODO Auto-generated method stub
//转换日期格式
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
}
在spring MVC配置文件进行配置
<!-- 配置全局日期转换器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean class="nuc.ss.wlb.core.web.DateEdtor"/>
</property>
</bean>