package com.xu.javabean;

 import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter; public class Test { // Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景
// 开发了一套简单、易用的API操作Bean的属性——BeanUtils,
// 在Beanutil中可以直接进行类型的自动转换。
// 使用beanUtils操作bean的属性(首先导入jar包,第三方开发工具包) @org.junit.Test
public void test1() throws Exception {
// BeanUtils可以填充JavaBeans属性通过反射实用方法。 Person p = new Person();
// void org.apache.commons.beanutils.BeanUtils
// .setProperty(Object bean, String name, Object value)
// throws IllegalAccessException, InvocationTargetException
// 设置指定的属性值,进行类型转换为所需的符合目标的属性类型。
BeanUtils.setProperty(p, "name", "zhangsan");
System.out.println(p.getName());
} @org.junit.Test
public void test2() throws IllegalAccessException,
InvocationTargetException {
// 例如:接收用户浏览器传递过来的姓名、年龄、性别等信息
// 由于是表单提交,所以都是字符串
String name = "lisi";
String age = "67";
String sex = "男";
String birthday = "1989-09-16"; // 为了让日期赋到bean的birthday属性上,我们给BeanUtils注册一个日期转换器
// ConvertUtils类转换为字符串的标量值来指定类的对象的实用方法,字符串数组来指定类的数组。 // static void register(Converter converter, Class clazz)
// 注册为指定目标类的自定义转换器,取代任何以前注册的转换器。
ConvertUtils.register(new Converter() {
// Object convert(Class type, Object value)
// 将指定的输入对象转换为指定类型的输出对象。 public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
if (!(value instanceof String)) {
throw new ConversionException("只支持String类型的转换!");
}
String str = (String) value;
if (str.trim().equals("")) {
return null;
}
// SimpleDateFormat(String pattern)
// 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// Date parse(String source)
// 从给定字符串的开始解析文本,以生成一个日期。
try {
// 此方法会抛出异常,因为是匿名内部类实现接口,所以不能抛只能处理
return sdf.parse(str);
} catch (ParseException e) {
// 如果发生此类异常,那么就让程序停止,
// 必须加上参数e,因为异常链不能断,要让调用者看到异常信息
throw new RuntimeException(e);
}
}
}, Date.class); Person p = new Person();
BeanUtils.setProperty(p, "name", name);
// p对象的age属性应该接收int类型的数据,但是使用BeanUtils可以自动帮我们完成转换动作
// 只支持8种基本数据类型的转换
// 其实可以用 BeanUtils.populate(bean, properties);
BeanUtils.setProperty(p, "age", age);
BeanUtils.setProperty(p, "sex", sex);
BeanUtils.setProperty(p, "birthday", birthday); System.out.println(p.getName());
System.out.println(p.getAge());
System.out.println(p.getSex());
System.out.println(p.getBirthday());
} @org.junit.Test
public void test3() throws IllegalAccessException,
InvocationTargetException {
// 例如:接收用户浏览器传递过来的姓名、年龄、性别等信息
// 由于是表单提交,所以都是字符串
String name = "lisi";
String age = "67";
String sex = "男";
String birthday = "1989-09-16"; ConvertUtils.register(new DateLocaleConverter(), Date.class); Person p = new Person();
BeanUtils.setProperty(p, "name", name);
// p对象的age属性应该接收int类型的数据,但是使用BeanUtils可以自动帮我们完成转换动作
// 只支持8种基本数据类型的转换
BeanUtils.setProperty(p, "age", age);
BeanUtils.setProperty(p, "sex", sex);
BeanUtils.setProperty(p, "birthday", birthday); System.out.println(p.getName());
System.out.println(p.getAge());
System.out.println(p.getSex());
System.out.println(p.getBirthday());
} }
</span>

Converter转换器使用的更多相关文章

  1. Converter(转换器)与Formatter(格式化) ,Validator(验证器)

    Converter(转换器)与Formatter(格式化)都可以用于将一种对象类型转换为另一种对象类型.Converter是通用元件,可以在应用程序的任意层中使用,而Fotermatter这是专门为W ...

  2. springMVC的 Converter转换器 和 Formatter

    Converter转换器 spring的Converter是可以将一种类型转换成另一种类型的一个对象, 自定义Converter需要实现Converter接口 日期转换器 import java.te ...

  3. SpringMVC:学习笔记(6)——转换器和格式化

    转换器和格式化 说明 SpringMVC的数据绑定并非没有限制,有案例表明,在SpringMVC如何正确绑定数据方面是杂乱无章的,比如在处理日期映射到Date对象上. 为了能够让SpringMVC进行 ...

  4. BenUtils组件和DbUtils组件

    BenUtils组件和DbUtils组件 [TOC] 1.BenUtils组件 1.1.简介 程序中对javabean的操作很频繁,所有Apache提供了一套开源api,方便javabean的操作!即 ...

  5. .Net下一个类型转换神器

    引言 类型转换经常遇到,最常用的应该是string类型转换为其它基元类型,常见于http参数类型转换.Convert静态类的Convert.ChangeType()方法可以把实现IConvertibl ...

  6. [转]Hibernate设置时间戳的默认值和更新时间的自动更新

    原文地址:http://blog.csdn.net/sushengmiyan/article/details/50360451 Generated and default property value ...

  7. guava学习--集合1

    Lists: 其内部使用了静态工厂方法代替构造器,提供了许多用于List子类构造和操作的静态方法,我们简单的依次进行说明,如下: newArrayList():构造一个可变的.空的ArrayList实 ...

  8. WPF数据绑定Binding(二)

    WPF数据绑定Binding(二) 1.UI控件直接的数据绑定 UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上. ...

  9. Android Retrofit实现原理分析

    retrofit有几个关键的地方. 1.用户自定义的接口和接口方法.(由动态代理创建对象.) 2.converter转换器.(把response转换为一个具体的对象) 3.注解的使用. 让我们跟随Ap ...

随机推荐

  1. CentOS 6 minimal 网络配置

    安装CentOS6 minimal 之后ifconfig 只有lo本地 的127.0.0.1 没有局域网ip. 这边我用的是vmware  nat  DHCP 提供网络服务.过程就不赘述了. 解决笔记 ...

  2. fail to create java virtual machine..

    今天打开zend stdio 的时候 出现的错误  fail to create java virtual machine... 然后找度娘了,,都说改xxxxx, 我打开360  ,把内存清理了一遍 ...

  3. Android中ExpandableListView的使用

    ExpandableListView是Android中可以实现下拉list的一个控件,具体的实现方法如下: 首先:在layout的xml文件中定义一个ExpandableListView < L ...

  4. uva133 救济金发放

    #include<stdio.h> #define maxn 20 ], n; int go( int p,int d,int t ) {// printf("a[%d]=%d\ ...

  5. ping指定地址

    最近用到相应功能,网上搜了下. 感谢网友的分享,原文链接如下:http://blog.csdn.net/nanfeiyannan/article/details/6636280 稍微更改了内容,代码如 ...

  6. WPF-流文档元素

    1.Block元素 用于分组其他元素 Paragraph是块级别元素,文本段落 Paragraph.Inlines集合内. 设置第一行缩进量Paragraph.TextIndet 2.Inline元素 ...

  7. 利用.net的内部机制在asp.net中实现身份验证

    知识点: 在ASP.NET中,任何页面都是继承于System.Web.UI.Page,他提供了Response,Request,Session,Application的操作.在使用Visual Stu ...

  8. python3验证码机器学习

    python3验证码机器学习 文档结构为 -- iconset -- ... -- jpg -- captcha.gif -- py -- crack.py 需要的库 pip3 install pil ...

  9. SQL Server 开发-语法学习

    一.定义变量 --简单赋值 declare @a int print @a --使用select语句赋值 ) select @user1='张三' print @user1 ) print @user ...

  10. 第一章 数据库概述、MySQL的安装和配置

      第一章 数据库概述.MySQL的安装和配置   1.为什么要使用数据库 最早是纸质文件来存储数据 缺点:不易保存,占用空间大 计算机出现以后,采用软件来进行保存(excel) 缺点:容易损坏 文件 ...