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的源碼,繼續改進

相關文章
相關標籤/搜索