BeanUtils制作自定义的转换器
一般来说,BeanUtils自带的Converter基本上可以满足我们在开发过程中的使用了,然而很多时候我们还是需要自定义一些转换器。
MyBean.java
package beanutils;
import java.util.Date;
public class MyBean {
private String name;
private int age;
private Date birthday;
private boolean isAlive;
private MyClass myclass;
public MyClass getMyclass() {
return myclass;
}
public void setMyclass(MyClass myclass) {
this.myclass = myclass;
}
public MyBean() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public boolean isAlive() {
return isAlive;
}
public void setAlive(boolean isAlive) {
this.isAlive = isAlive;
}
}
MyClass.java
大家可以看到,这个Bean里面多了一个MyClass的组合类。内容很简单,如下:
package beanutils;
public class MyClass {
private String classname;
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
}
TestMyBean.java
测试代码如下:
package beanutils;
import java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.converters.BooleanConverter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test;
public class TestMyBean {
/**
* 首先测试的是基本的数据类型
*
* @throws Exception
*/
@Test
public void test1() throws Exception {
String name = "Mark";
int age = 20;
boolean isAlive = true;
MyBean myBean = new MyBean();
BeanUtils.setProperty(myBean, "name", name);
BeanUtils.setProperty(myBean, "age", age);
// 对于boolean貌似不能进行转换
// BeanUtils.setProperty(myBean, "isAlive", isAlive);
System.out.println("Print the result by BeanUtils");
System.out.println("Name:" + myBean.getName());
System.out.println("Age:" + myBean.getAge());
System.out.println("IsAlive:" + myBean.isAlive());
}
/**
* 对Date进行转换测试
*
* @throws Exception
*/
@Test
public void test2() throws Exception {
String date = "2016-07-05";
ConvertUtils.register(new DateLocaleConverter(), Date.class);
MyBean myBean = new MyBean();
BeanUtils.setProperty(myBean, "birthday", date);
System.out.println("Birthday:" + myBean.getBirthday());
}
/**
* 测试boolean类型的数据
*
* @throws Exception
*/
@Test
public void test3() throws Exception {
boolean isalive = true;
ConvertUtils.register(new BooleanConverter(), Boolean.class);
MyBean myBean = new MyBean();
BeanUtils.setProperty(myBean, "isAlive", isalive);
System.out.println("IsAlive:" + myBean.isAlive());
}
/**
* 测试自定义的转换类
*
* @throws Exception
*/
@Test
public void test4() throws Exception {
MyClass myclass = new MyClass();
myclass.setClassname("软测1414班");
ConvertUtils.register(new Converter() {
@Override
public <T> T convert(Class<T> type, Object value) {
MyClass myclass = (MyClass) value;
return (T) myclass;
}
}, MyClass.class);
MyBean myBean = new MyBean();
BeanUtils.setProperty(myBean, "myclass", myclass);
System.out.println("Customer Converter result:" + myBean.getMyclass().getClassname());
}
}
其中最关键的就是test4方法,这里采用的是JUnit的方式进行的代码测试,有不清楚的小伙伴们可以查阅一下相关于JUnit的使用哦。
/**
* 测试自定义的转换类
*
* @throws Exception
*/
@Test
public void test4() throws Exception {
MyClass myclass = new MyClass();
myclass.setClassname("软测1414班");
ConvertUtils.register(new Converter() {
@Override
public <T> T convert(Class<T> type, Object value) {
MyClass myclass = (MyClass) value;
return (T) myclass;
}
}, MyClass.class);
MyBean myBean = new MyBean();
BeanUtils.setProperty(myBean, "myclass", myclass);
System.out.println("Customer Converter result:" + myBean.getMyclass().getClassname());
}
我们在代码中定义了一个泛型的转换器,其作用就是专门用于转换MyClass.class。只要遇到了这样的类,这个转换器的回调方法就会起作用。将其转换!这就是BeanUtils的核心思想。
总结
对于转换器而言,我们可以通过自定义一些转换器来减少代码的重复,而且可以更加方便的维护我们的代码。
但是,在具体的使用到一个转换器之前,我们一定要先想想,有没有内置的转换器呢?如果有的话,就不必重复的造轮子了。
下面 我就把BeanUtils内置的常用的转换器罗列一下吧。方便大家浏览。
- AbstractArrayConverter
- AbstractConverter
- ArrayConverter
- BigDecimalConverter
- BooleanArrayConverter
- BooleanConverter
- ByteArrayConverter
- ByteConverter
- CalendarConverter
- CharacterArrayConverter
- CharacterConverter
- ClassConverter
- ConverterFacade
- DateCOnverter
- DateTimeConverter
- DoubleConverter
- FloatArrayConverter
- FileConverter
- FloatConverter
- IntegerArrayConverter
- IntegerConverter
- LongConverter
- LondArrayCOnverter
- NumberConverter
- ShortArrayConverter
- ShortConverter
- SqlTimeConverter
- SqlTimestampConverter
- StringArrayConverter
- StringConverter
- URLConverter
BeanUtils制作自定义的转换器的更多相关文章
- Struts2框架的自定义类型转换器
前言:对于java的基本数据类型及一些系统类(如Date类.集合类),Struts2提供了内置类型转换功能,但是也有一定的限制.所以就演示出自定义类型转换器 一.应用于局部类型转换器 eg.用户登录出 ...
- sruts2 自定义类型转换器
1.1.1 Struts2中自定义类型转换器:(了解) 类型转换的过程是双向的过程: JSP---->Action参数提交:String---Date. Action---->JSP ...
- Struts2之自定义类型转换器
Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...
- Android中制作自定义dialog对话框的实例
http://www.jb51.net/article/83319.htm 这篇文章主要介绍了Android中制作自定义dialog对话框的实例分享,安卓自带的Dialog显然不够用,因而我们要继 ...
- [原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 自定义类型转换器converter
作用:目前将日期转换成string,将string转换成我想要的类型 0509课件里讲 一.数据类型转换在web应用程序中,数据存在两个方向上的转换:1.当提交表单时 表单数据以字符串的形式提交 ...
- Expression Blend制作自定义按钮(转)
来源:http://www.cnblogs.com/iChina/archive/2011/11/25/2262854.html Expression Blend制作自定义按钮 1.从Blend工具箱 ...
- Ⅵ.spring的点点滴滴--自定义类型转换器
承接上文 自定义类型转换器 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class CustomeConverter : TypeConverter{ ...
- struts2自定义类型转换器
首先,何为struts2的类型转换器? 类型转换器的作用是将请求中的字符串或字符串数组参数与action中的对象进行相互转换. 一.大部分时候,使用struts2提供的类型转换器以及OGNL类型转换机 ...
随机推荐
- spring源码阅读(2)核心类介绍
(1).BeanFactory作为一个主接口不继承任何接口,暂且称为一级接口. (2).有3个子接口继承了它,进行功能上的增强.这3个子接口称为二级接口. (3).ConfigurableBeanFa ...
- hive中No space left on device问题或者Java HotSpot(TM)64-Bit Server VM warning:Insufficient space for shared memory
- [HAOI 2012]音量调节
Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...
- [Luogu 3810]三维偏序
Description 有 $ n $ 个元素,第 $ i $ 个元素有 $ a_i $ .$ b_i $ .$ c_i $ 三个属性,设 $ f(i) $ 表示满足 $ a_j \leq a_i $ ...
- [CQOI2013]棋盘游戏
Description 一个n*n(n>=2)棋盘上有黑白棋子各一枚.游戏者A和B轮流移动棋子,A先走. A的移动规则:只能移动白棋子.可以往上下左右四个方向之一移动一格. B的移动规则:只能移 ...
- ●洛谷P2934 [USACO09JAN]安全出行Safe Travel
题链: https://www.luogu.org/problemnew/show/P2934 题解: 最短路(树),可并堆(左偏堆),并查集. 个人感觉很好的一个题. 由于题目已经明确说明:从1点到 ...
- [LSGDOJ 1505]售货员的难题 状压DP
题目描述 某 乡有n个村庄(1<n<15),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村 到B村与B村到A村的路大多不同.为了提高 ...
- [Baltic2004]sequence
题目描述: 给定一个序列t1,t2,...,tn ,求一个递增序列z1<z2<...<zn , 使得R=|t1−z1|+|t2−z2|+...+|tn−zn| 的值最小.本题中,我们 ...
- HDU1348 Wall 凸包
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1348 题意:给出一个凸包,求出与凸包距离 L的外圈周长 凸包模板题,练练Andrew算法求出凸包周长再 ...
- jsvascript === 和==的区别
== 用于比较 判断 两者相等 ==在比较的时候可以转自动换数据类型 ===用于严格比较 判断两者严格相等 ===严格比较,不会进行自动转换,要求进行比较的操作数必须类型 ...