在struts2里面有个叫类型转换器的东东,而在spring里面也有个类似的功能,叫属性编辑器
通过注解实现spring属性编辑器
以前用xml配置实现过spring的竖向编辑器,今天突然想到能不能用注解来实现spring的属性编辑器配置
比如网站客户端需要传入一个时间数据,我们需要对这个时间进行处理,因为后台只能获得string类型的数据,就是说你的控制器方法里面的参数,只有string。对于date类型是无法获取到的
一共需要三步
第一:创建有一个继承了PropertyEditorSupport类的类,然后重新setAsText方法
public class customerProperty extends PropertyEditorSupport{
private String format = "yyyy-MM-dd";
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
public void setAsText(String text) throws IllegalArgumentException{
SimpleDateFormat sf = new SimpleDateFormat(format);
Date date = null;
try {
date = sf.parse(text);
this.setValue(date);
//this.setValue(sf.parse(text));
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第二步:在控制器(Controller)里面添加以下方法
使用注解@InitBinder注解
@InitBinder(value = "birthday")
public void initBinder(WebDataBinder binder){
binder.registerCustomEditor(Date.class, new customerProperty());
}
这个注解会在调用Controller之前被使用
第三步:在控制器(Controller)里面,写一个@RequestMapping测试
@InitBinder(value = "birthday")
public void initBinder(WebDataBinder binder){
binder.registerCustomEditor(Date.class, new customerProperty());
}
//用户注册
@RequestMapping("/register")
public String userregister(Date birthday, String username, String password,
HttpSession session, HttpServletRequest request) {
System.out.println(birthday.getTime());
return "member/login";
}
我这里主要说说用InitBinder注解的一些注意事项
a、里面的value参数必须要和我们的RequestMapping方法里面的参数一致
b、value里面的参数可以是多个,当是很多个参数的时候,必须有一个是和我们需要转换的参数是一致的,如您可以这样写
@InitBinder(value = {"birthday","birthday1"})
public void initBinder(WebDataBinder binder){
binder.registerCustomEditor(Date.class, new customerProperty());
}
如果您需要转换的参数是birthday或birthday1都是可以的
c、通过InitBinder注解的方法,其方法名不是唯一的,就是说您可以在一个控制器内注册很多个属性编辑器,如以下代码是合法的
@InitBinder(value = {"birthday","birthday1"})
public void initBinder(WebDataBinder binder){
binder.registerCustomEditor(Date.class, new customerProperty());
}
@InitBinder(value = {"aa1","aa2"})
public void aaaa(WebDataBinder binder){
binder.registerCustomEditor(aaaa.class, new aaaa());
}
d、您大致可以猜到这局代码里面参数的含义
binder.registerCustomEditor(Date.class, new customerProperty());
第一个参数表示转换的类型
第二个参数表示具体的属性编辑器
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情