__震驚!!我的天啦,OMG!!
1. initBinder對我而言的價值在於,通過傳統表單post數據到后端的controller時候,數據類型的自動轉換。比如前端頁面填寫一個日期字符串,通過InitBinder,可以把日期字符串轉換為Date對象。避免了手動轉化,或者避免java.lang.IllegalArgumentException異常的產生。
2. initBinder放在RestControllerAdvice注解標注的類中,可以對所有控制器起作用。
3. initBinder對post的json沒有效果。
4. 可以自定義自己的Editor然后再InitBinder注冊,以完成一些操作。
demo:
@InitBinder public void InitBinder(WebDataBinder binder) { // 前端字符串格式為yyyy-MM-dd HH:mm:ss 將在此轉換為Date對象,然后才把轉換的值交給控制器 DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); CustomDateEditor dateEditor = new CustomDateEditor(df, true); binder.registerCustomEditor(Date.class, dateEditor); // 對前端傳來的字符串通過TextEditor進行處理,處理完成后交給控制器 binder.registerCustomEditor(String.class, new TextEditor()); }
_
demo2
import org.springframework.beans.propertyeditors.PropertiesEditor; public class TextEditor extends PropertiesEditor { @Override public void setAsText(String text) throws IllegalArgumentException { text = //一些業務邏輯 setValue(text); } }
_