網頁

2017/12/5

在URL參數中傳遞日期Date至Spring MVC Controller的@ModelAttribute參數

從前端頁面要透過url參數傳遞日期至Spring MVC的@ModelAttribute參數,而該Model物件的屬性為java.util.Date,則日期成員變數前可加上@DateTimeFormat並根據前端傳來的格式設定pattern屬性,

例如下面是@ModelAttribute的參數Model物件Person

public class Person {
  private String name;
  
  @DateTimeFormat(pattern="yyyy-MM-dd") // 設定接收日期參數格式
  private Date birthday; // 用來接收Date參數
  
  public String getName() {
    return name;
  }
  public void setName(String name){
    this.name = name;
  }
  public Date getBirthday() {
    return birthday;
  }
  public void setBirthday(Date birthday){
    this.birthday = birthday;
  }
}

Spring MVC Controller 用來接收Request的method

@RequestMapping(value = "/edit")
public ModelAndView edit(@ModelAttribute("person") Person person) {
   Map() model = new HashMap();
   model.put("model", person);
   return ModelAndView("edit", model);
}

則在url傳遞日期可使用yyyy-mm-dd的格式。

var url = contextPath + "edit?name=John&birthday=1985-03-13";

如果參數是使用@RequestParam來接,也可在傳入的參數使用@DateTimeFormat

@RequestMapping(value = "/edit")
public ModelAndView edit(
  @RequestParam("name") String name, 
  @RequestParam("birthday") @DateTimeFormat(pattern="yyyy/MM/dd") Date birthday) { // highlight.js 顏色跑掉了...
   // ...
}

或在Controller使用@InitBinder

@InitBinder("person") // "person"即為@ModelAttribute的"person"
public void personBinding (WebDataBinder binder) {
  SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
  format.setLenient(false);
  binder.registerCustomEditor(Date.class, "birthday", new CustomDateEditor(format, true)); // "birthday"為Person的成員變數birthday
}

@RequestMapping(value = "/edit")
public ModelAndView edit(@ModelAttribute("person") Person person) {     
   Map() model = new HashMap();
   model.put("model", person);   
   return ModelAndView("edit", model);
}

如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


參考:

沒有留言:

張貼留言