spring mvc databind 复杂对象
springmvc的controller可以进行对象的数据绑定。如下的代码可以直接将form传过来的id和name映射到参数里。
//映射到id 和 name上 @RequestMapping("hello") public void hello (String id,String name) { ... } //映射到对象里 @RequestMapping("hello1") public void hello1 (User user) { ... } public class User { private String id; private String name; }
可是当User中包含另一个对象,可能会映射失败。如下的代码:
//映射到对象里 @RequestMapping("hello1") public void hello1 (User user) { ... } public class User { private javax.naming.Name dn; private String id; private String name; }
此时会报String类型的dn无法转换成Name类型,解决方法是 注册Name类型的对象。 在controller中添加一个databinder方法,需要注意仅仅在该controller中起作用。
@InitBinder public void dataBinder(WebDataBinder binder) { // 定义一个 Name 属性编辑器 PropertyEditor nameEditor = new PropertyEditorSupport() { @Override public String getAsText() { // TODO Auto-generated method stub Name name = (Name) getValue(); return name.toString(); } @Override public void setAsText(String str) throws IllegalArgumentException { // TODO Auto-generated method stub Name name = null; try { name = new LdapName(str); } catch (InvalidNameException e) { // TODO Auto-generated catch block e.printStackTrace(); } setValue(name); } }; // 使用 WebDataBinder 注册 User 类型的属性编辑器 binder.registerCustomEditor(Name.class, nameEditor); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。