springmvc使用实体类接收表单提交数据中含有String类型对应Date类型的不匹配情况,页面提交表单报错400,时如何处理?
参看博客:http://blog.youkuaiyun.com/u014079773/article/details/51865178
- 我的错误发生原因描述:
实体类中包含了一个Date格式的属性,前台提交表单时使用的日期插件,提交的是String类型的日期,于是出现了如400下报错:
实体类:
public class OperateCompactModel implements BaseIdModel {
private String id;
private String pId; //工程id
private String company; //建设单位
private String projectName; //工程名称
private String compactName; //合同名称
private String compactType; //合同类别 1-材料合同 2-用工合同 3-设备租赁合同 4-设备采购合同
private String compactBrief;//合同概要
private String compactNum; //合同编号
private String supplier; //供应商名称
private double amount; //总金额
private String attachment; //附件
private Date signDate; //签订日期
private String excute; //执行情况
private String remark; //备注
private String invoice; //发票
OperateCompactModel implements BaseIdModel {
private String id;
private String pId; //工程id
private String company; //建设单位
private String projectName; //工程名称
private String compactName; //合同名称
private String compactType; //合同类别 1-材料合同 2-用工合同 3-设备租赁合同 4-设备采购合同
private String compactBrief;//合同概要
private String compactNum; //合同编号
private String supplier; //供应商名称
private double amount; //总金额
private String attachment; //附件
private Date signDate; //签订日期
private String excute; //执行情况
private String remark; //备注
private String invoice; //发票
表单提交的日期字段:
<div>
<label>签订日期</label>
<span><input class="laydate-icon" id="demo" name="signDate0" value="2016-6-25"></span>
</div>
后台接收方式:
@RequestMapping(value="operate_addCompact.html")
public String addOperateCompact(String token, OperateCompactModel operateCompactModel){
//判断是否重复提交
boolean isRepeat = NoRepeateSubmit.isRepeatSubmit(request,token);//--token
if(isRepeat){//如果重复提交了,直接返回 //---token
return "redirect:operate_compact.html?id="+operateCompactModel.getpId();
}
//非重复提交,清除session中的token,执行添加代码
request.getSession().removeAttribute("token");
operateCompactService.add(operateCompactModel);
return "redirect:operate_compact.html?id="+operateCompactModel.getpId();
}
报错:
- 解决办法:
后台使用一个单独的String字段接收表单提交的日期属性,通过dateFomate转化成需要的Date格式再存入到实体类中.
如下:
@RequestMapping(value="operate_addCompact.html")
public String addOperateCompact(String token, String signDate0, OperateCompactModel operateCompactModel){
//判断是否重复提交
boolean isRepeat = NoRepeateSubmit.isRepeatSubmit(request,token);//----------token---------------
if(isRepeat){//如果重复提交了,直接返回 //----------token---------------
return "redirect:operate_compact.html?id="+operateCompactModel.getpId();
}
//非重复提交,清除session中的token,执行添加代码
request.getSession().removeAttribute("token");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
operateCompactModel.setSignDate(sdf.parse(signDate0));
} catch (ParseException e) {
e.printStackTrace();
}
operateCompactService.add(operateCompactModel);
return "redirect:operate_compact.html?id="+operateCompactModel.getpId();
}
String signDate0, OperateCompactModel operateCompactModel){
//判断是否重复提交
boolean isRepeat = NoRepeateSubmit.isRepeatSubmit(request,token);//----------token---------------
if(isRepeat){//如果重复提交了,直接返回 //----------token---------------
return "redirect:operate_compact.html?id="+operateCompactModel.getpId();
}
//非重复提交,清除session中的token,执行添加代码
request.getSession().removeAttribute("token");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
operateCompactModel.setSignDate(sdf.parse(signDate0));
} catch (ParseException e) {
e.printStackTrace();
}
operateCompactService.add(operateCompactModel);
return "redirect:operate_compact.html?id="+operateCompactModel.getpId();
}
当然表单提交的字段name也要改成相应的signDate0.
400报错记录