springmvc bean 获取date 爆400解决方式

@RequestMapping("save")
    @ResponseBody
    public Result save(HttpServletRequest request,HttpServletResponse response,ScorePo scorePo) throws Exception{前端

 

相似这样的,若是前端 form 表单 提交一个 实体的参数 java

方式一在实体类中加日期格式化注解:spring

好比:后端

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    protected java.util.Date  createTime;         /*建立时间*/app

 

其余方式就是 在MVC 里面 加入一段数据时间绑定处理的方式。ide

或者来一个全局的时间格式处理 这里不进行说明ui

或者是 好比this

<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>spa

                                <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>orm

咱们将制定日期改一个 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的源码,继续改进

相关文章
相关标签/搜索