这两者的功能都是为了对我们前台请求数据的转换,使程序能够正常接收
PropertyEditorSupport : Spring 3.0之前使用的架构
Converter:Spring 3.0之后的类型转换系统
两者的区别详细可看这篇文章:http://jinnianshilongnian.iteye.com/blog/1723270
一:属性编辑PropertyEditorSuppor
首先编写自己的类型
DatePropertyEditor 日期类型
复制代码
SEXPropertyEditor自定义枚举类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27public class DatePropertyEditor extends PropertyEditorSupport { @Override public Object getValue() { return super.getValue(); } @Override public String getAsText() { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(getValue()); } @Override public void setAsText(String text) throws IllegalArgumentException { Date date = null; try { //这里的text一定是 2015-9-03 这样类型和下面的格式一样 //这就是为什么spring不提供转换器的原意不知道你是什么格式的调用setAsText对属性值进行转换类型 date = new SimpleDateFormat("yyyy-MM-dd").parse(text); } catch (ParseException e) { e.printStackTrace(); } setValue(date);//类型转换 } }
复制代码
SEX枚举类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22public class SEXPropertyEditor extends PropertyEditorSupport { @Override public Object getValue() { return super.getValue(); } @Override public String getAsText() { return super.getAsText(); } @Override public void setAsText(String text) throws IllegalArgumentException { if(!StringUtils.isEmpty(text)){ setValue(SEX.get(text)); }else{ setValue(null); } } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40public enum SEX { Male("1", "男"), Female("-1", "女"), Unknown("0", "保密"); private final String value; private final String description; SEX(String v, String desc) { this.value = v; this.description = desc; } public String getValue() { return value; } public String getDescription() { return description; } public static SEX get(String strValue) { for (SEX e : values()) { if (e.getValue().equals(strValue)) { return e; } } return null; } @Override public String toString() { return this.value; } }
控制器接收数据如下
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20@Controller public class DataController { @RequestMapping("/binder") public void data(Date date,SEX sex/*参数里面也可以放对象*/){ System.out.println(date); System.out.println(sex.getDescription()); System.out.println("======="); } /** * 这个在数据传到控制器方法前会执行,这里对对象属性进行编辑 * 如果没有这步操作,请求将报 400错误 * @param binder */ @InitBinder public void initBinder(ServletRequestDataBinder binder){ binder.registerCustomEditor(Date.class, new DatePropertyEditor()); binder.registerCustomEditor(SEX.class, new SEXPropertyEditor()); } }
这个不是全局的,哪个控制器里面需要转换就必须用@InitBinder进行属性编辑
二:转换器Converter
通过implements Converter实现类型转换
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/** * Converter<原类型,模板类型> */ public class DateConverter implements Converter<String,Date> { @Override public Date convert(String arg) { Date date = null; try { date = new SimpleDateFormat("yyyy-MM-dd").parse(arg); } catch (ParseException e) { e.printStackTrace(); } return date; } }
SexEnumConverter自定义枚举类型的转换器
复制代码
1
2
3
4
5
6
7
8
9
10
11
12public class SexEnumConverter implements Converter<String,SEX> { @Override public SEX convert(String str) { String value = str.trim(); if (value.isEmpty()) { return null; } return SEX.get(str); //这里就是将String类型转换为自定义的枚举 } }
然后我们需要修改一下配置文件
复制代码
1
2
3
4
5
6
7
8
9
10
11<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.lwp.converter.DateConverter" /> <bean class="com.lwp.converter.SexEnumConverter" /> </set> </property> </bean> <mvc:annotation-driven conversion-service="conversionService"/>
此时这两个转换器就是全局可以不再使用属性编辑器,控制器中的代码删除InitBinder方法和注解
复制代码
1
2
3
4
5
6
7
8
9
10
11@Controller public class DataController { @RequestMapping("/binder") public void data(Date date,SEX sex/*参数里面也可以放对象*/){ System.out.println(date); System.out.println(sex.getDescription()); System.out.println("======="); } }
访问http://localhost:8080/sw/binder?date=2013-9-12%2023:2:23&sex=-1后台结果表示转换成功

注: 如果转换器和属性编辑器同时作用上,spring会先使用编辑器的方法,而不会再进入转换器的操作.两者不冲突.
最后
以上就是苹果黄蜂最近收集整理的关于Spring属性编辑PropertyEditorSuppor转换器Converter的全部内容,更多相关Spring属性编辑PropertyEditorSuppor转换器Converter内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复