Spring的AbstractCommandController提供了command对象,用来接收queryString或者Form中内容,其中PropertyEditorSupport就是用于验证提交的内容的;首先需要重写controller中initBinder方法;通知Controller在填充Command的时候那些类型(除了原生类型之外的)需要进行处理,以及处理的类什么:binder.registerCustomEditor(UserModel.class, new UserNameEditor());注意,UserMode是Command类型的一个字段类型(Comand需要在构造函数的时候指定);构造UserNameEditor的时候注意:继承自PropertyEditorSupport,重写setAsText;整个的处理流程是:QueryString(Form)到了dispatcher,再根据一些配置决定将请求转交给AbstractCommandController的某个类,构造Command对象,在给属性进行复制的时候,首先判断这个属相的类型是否有被注册为自定义处理(registerCustomerEditor),如果是有,则调用注册的editor的setAsText方法进行处理,构造该属性;昨天晚上我弄到12点,就是因为错误的理解为,Spring将会递归遍历UserModelContainer中所以字段找到同名属性进行赋值;但是真实情况是:UserName其实是直接付给UserContainer中同名属性(只是查看一级),如果同名属性被注册为CustomerEditor,那么进行自定义处理;其实PropertyEditorSupport主要不是做类型校验,而是做类型转换,比如QueryString中addree=LN-DL-高新区,那么可以设计一个Address对象,以"-"做分隔符,来为Province,City以及Street三字段赋值;