springmvc bean 获取date 爆400解决方式

@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