@RequestMapping("save")
@ResponseBody
public Result save(HttpServletRequest request,HttpServletResponse response,ScorePo scorePo) throws Exception{
类似这样的,如果前端 form 表单 提交一个 实体的参数
方式一在实体类中加日期格式化注解:
比如:
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
protected java.util.Date createTime; /*创建时间*/
其他方式就是 在MVC 里面 加入一段数据时间绑定处理的方式。
或者来一个全局的时间格式处理 这里不进行说明
或者是 比如
<label class="col-sm-1 control-label no-padding-right"
for="form-field-1">制定日期<span class="middle red">*</span></label>
<div class="col-sm-4">
<input name="createTimeString" id="createTimeString"
type="text" onFocus="WdatePicker({lang:'zh-cn',dateFmt:'yyyy-MM-dd HH:mm:ss'})" value="" ltype="text" validate='{required:true,date:true}' readonly />
</div>
<label class="col-sm-1 control-label no-padding-right"
for="form-field-1">制定日期22<span class="middle red">*</span></label>
<div class="col-sm-4">
<input name="createTime" id="createTime"
type="text" onFocus="WdatePicker({lang:'zh-cn',
dateFmt:'yyyy-MM-dd HH:mm:ss'})" validate='{required:true,date:true}' readonly value="${(bean.createTime?string('yyyy-MM-dd HH:mm:ss') )!}" />
</div>
我们将制定日期改一个 name 在后端 进行 获取参数,然后转化为 date 类型即可
String createTimeString=RequestUtil.getStringParameter(request, "createTimeString");
目前就这几种方式试过了,都是可以的
但是有时候还是会遇到其他的问题,比如我的项目里面
HrEffPfmcePscoreController extends BasicController{
继承了一个类型,
public abstract class BasicController{
protected Logger logger = LoggerFactory.getLogger(getClass());
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
}
里面的 日期转化代码 已经写好了,
可是如果 前端 <input name="createTime" id="createTime"
type="text" onFocus="WdatePicker({lang:'zh-cn',
dateFmt:'yyyy-MM-dd'})"
的时间格式 和后台的 转换的时间格式不一致,也是会 爆400错误的。
那么 这样时候就要 重写 方法了
// 如果时间格式的要求改了前端,那么后端要对应的进行 重写改方法,才可以的,否则是不起作用的
@Override
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor
(Date.class, new CustomDateEditor
(new SimpleDateFormat("yyyy-MM-dd"), true));
}
重写 时间转换格式,和前端的对应起来即可。
当然还有一种最笨的方法
搞一个 实体子类,基本实体类,在 实体子类里面 对时间进行转换,然后将实体子类 和前端的对应起来
比如:
public class HrEffPfmcePlaneePo extends HrEffPfmcePlaneeTbl{
private static final long serialVersionUID = 1L;
/**
* 计划结束时间的 时间字符串,为了解决 前端爆时间 400
* 等解决了就可以去掉了
*/
protected String planEtimeString;
public String getPlanEtimeString() {
if (getPlanEtime() !=null) {
return DateUtils.toString(getPlanEtime(),"yyyy-MM-dd");
}else {
return planEtimeString;
}
}
public void setPlanEtimeString(String planEtimeString) {
this.planEtimeString = planEtimeString;
}
这样就肯定可以解决了。
解决办法还有很多,最好还是 大家看看springMVC的源码,继续改进
转载于:https://my.oschina.net/u/2419285/blog/794897