当前位置: 首页 > news >正文

自定义日期类型转换器


(1)首先看一下项目的布局结构:


(2)要准备的两个jar包,在lib目录下的,commons-beanutils-1.8.3.jar   commons-logging-1.1.1.jar这两个是必须的  要提前引入,以免不必要的麻烦!


并且下边要注意包的引入 :是在org.apache下的 不是在com.sum.org.apache下的  错误的话 不会成功!


(3)全部代码如下:(有注释 这里不再解释)

1.User.java

package com.lc.commons;

public class User {

	private String username;
	private String password;
	private int age;
	private java.util.Date birthdate;
	//get set方法

	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password
				+ ", age=" + age + ", birthdate=" + birthdate + "]";
	}

}


2.DateConverter.java(实现Converter接口)

package com.lc.commons;

import java.text.ParseException;
import java.text.SimpleDateFormat;


import org.apache.commons.beanutils.Converter;
/**
 * 把String转化为java.util.Date的类型转换器
 * @author xuliugen
 *
 */
public class DateConverter implements Converter {

	public Object convert(Class type, Object value) {
		if(value == null) return null; //如果要转换的值为null 直接返回
		if(value instanceof String){ //如果要转换的不是String 直接返回
			return value;
		}
		
		String val = (String) value; //把值转化为String
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
		try {
			return sdf.parse(val);
		} catch (ParseException e) {
			throw new RuntimeException(e);
		}
	}
	
}

3.CommonUtils.java

package com.lc.commons;

import java.util.Map;
import java.util.UUID;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;


/**
 * 小工具类
 * 
 * @author xuliugen
 * 
 */
public class CommonUtils {

	/**
	 * 返回一个不重复的字符串
	 * 
	 * @return
	 */
	public static String uuid() {
		return UUID.randomUUID().toString().replace("-", "").toUpperCase();
	}

	/**
	 * 把map转化成对象
	 * 
	 * @param map
	 * @param calzz
	 * @return 
	 * 
	 * 把Map转化成指定类型
	 */
	public static <T> T toBean(Map map, Class<T> clazz) {
		try {
			/*
			 * 1.通过参数clazz创建实例
			 * 2.使用BeanUtils.populate把map的数据封闭到bean中
			 */
			T bean = clazz.newInstance();
			/*
			 * 自定义的类型转换器DateConverter()
			 * 1.第一个参数为自定义的转换器
			 * 2.第二个参数为目标类型
			 */
			ConvertUtils.register(new DateConverter(),java.util.Date.class);
			BeanUtils.populate(bean, map);
			return bean;

		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

}

4.Demo.java用于测试


package com.lc.commons;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

public class Demo {

	/*
	 * 写一个map,map中的String要封装到User的age中
	 */
	@Test
	public void fun1() {
		Map<String, String> map = new HashMap<String, String>();

		map.put("username", "张三");
		map.put("password", "123");
		map.put("age", "55");
		
		User user = CommonUtils.toBean(map,User.class);
		System.out.println(user);
	}
	/**
	 * 不可以把String转化为java.util.Date,需要我们注册一个类型转换器
	 * 1.写一个类型转化器,用来把String转化为Date
	 * 2.
	 */
	@Test
	public void fun2() {
		Map<String, String> map = new HashMap<String, String>();

		map.put("username", "张三");
		map.put("password", "123");
		map.put("age", "55");
		map.put("birthday", "2013-01-29");
		
		User user = CommonUtils.toBean(map,User.class);
		System.out.println(user);
	}
}




结果出来  以后可以以此类比 写出其他类型的转换器



相关文章:

  • JDK环境变量详细讲解
  • 2014年末最强悍IT学习视频教程分享
  • 搭建CAS单点登录服务器
  • Android应用开发相关下载资源(2014/12/14更新)
  • 在SQL Server中为什么不建议使用Not In子查询
  • Eclipse+超快的模拟器Genymotion开发Android应用(第一步:安装及配置Genymotion)
  • 光棍节这天,我终于在AppStore上线了
  • Eclipse+超快的模拟器Genymotion开发Android应用(第二步:集成Genymotion和eclipse)
  • Android学习笔记之GridView的使用详解
  • mysql和mysql jdbc连接器mysql-connector-java对应关系
  • Android学习笔记之RadioButton的使用详解
  • lintcode :Longest Palindromic Substring 最长回文子串
  • Android学习笔记之Switch的使用案例
  • Android学习笔记之AutoCompleteTextView自动填充功能的案例
  • Linux笔记-常用命令(未完)
  • 【译】JS基础算法脚本:字符串结尾
  • Android系统模拟器绘制实现概述
  • Angular4 模板式表单用法以及验证
  • css系列之关于字体的事
  • docker python 配置
  • emacs初体验
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Linux各目录及每个目录的详细介绍
  • Node项目之评分系统(二)- 数据库设计
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python十分钟制作属于你自己的个性logo
  • unity如何实现一个固定宽度的orthagraphic相机
  • 编写高质量JavaScript代码之并发
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 工程优化暨babel升级小记
  • 欢迎参加第二届中国游戏开发者大会
  • 精彩代码 vue.js
  • 前端存储 - localStorage
  • 算法之不定期更新(一)(2018-04-12)
  • 异步
  • # 达梦数据库知识点
  • #Linux(make工具和makefile文件以及makefile语法)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)常见O(n^2)排序算法解析
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C语言)逆序输出字符串
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (二)fiber的基本认识
  • (二)springcloud实战之config配置中心
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (剑指Offer)面试题41:和为s的连续正数序列
  • 、写入Shellcode到注册表上线
  • ... 是什么 ?... 有什么用处?
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core中Emit的使用
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600