文档章节

beanutils.Converter使用探索

五大三粗
 五大三粗
发布于 2015/11/02 21:08
字数 614
阅读 127
收藏 0

org.apache.commons.beanutils.ConvertUtils

这是一个接口,其中只包含一个方法 convert (java.lang.Class type, java.lang.Object value) ,其功能是将输入参数 value 转换为指定类型 type 的实例。

范例:

我建立了一个 Rectangle 对象,并为这 rectangle 对象建立了一个 RectangleConverter ,随后将 RectangleConverter 注册进 ConvertUtils 中。形为 {3,2} 的字符串可以转变为一个 rectangle 

这里唯一要说明的就是 RectangleConverter 中要实现两个 converter 方法,也就是要对接口 Converter 中定义的方法进行 overload,从而可以实现字符串和 Rectangle 之间的互相转换了。

 

package beanutil; 
import java.util.StringTokenizer; 
import org.apache.commons.beanutils.ConvertUtils; 
import org.apache.commons.beanutils.Converter;

public class RectangleConverter implements Converter {

 

    public Object convert(Class arg0, Object arg1) { 
       if (arg1 instanceof String) 
    
            return convert(arg0, arg1.toString()); 
       return convert(arg0, (Rectangle) arg1);

   }

    public Rectangle convert(Class rectangleType, String para) { 
    
       StringTokenizer token = new StringTokenizer(para, ","); 
          
 Double temp1, temp2 = null; 
         
  temp1 = (Double) ConvertUtils.convert(token.nextToken(), Double.class); 
          
 temp2 = (Double) ConvertUtils.convert(token.nextToken(), Double.class); 
         
  Rectangle rect = new Rectangle(); 
            
rect.setLength(Math.max(temp1.doubleValue(), temp2.doubleValue())); 
           
 rect.setWidth(Math.min(temp1.doubleValue(), temp2.doubleValue())); 
          
 return rect;

       }

 

 public String convert(Class string, Rectangle rect) {

       StringBuffer buffer = new StringBuffer("("); 
      
 buffer.append(rect.getLength()).append(","); 
       
 buffer.append(rect.getWidth()); 
      
  return buffer.toString();

       }

 

}

 

RectangleConverter注册到ConvertUtils中,我们就可以把形为{4,5}的字符串转换为Rectangle的实例,同样可以将Rectangle的实例转换为形为{4,5}的字符串。

 

另附Rectangle的代码:

package beanutil;

public class Rectangle {

 

       double length = 0.0d; 
     
  double width = 0.0d; 
       
 public double getLength() { 
    
        return length;

       }

 

       public void setLength(double length) { 
        
  this.length = length; 
      
}

     public double getWidth() {

    return width;

     }

     public void setWidth(double width) {

            this.width = width; 
   
 }

 

 

 

 

      

 

 

 

 

       public double computeArea(){

 

 

 

 

              return length*width;

 

 

 

 

       }

 

 

 

 

      

 

 

 

 

       public String toString(){

 

 

 

 

              StringBuffer buffer = new StringBuffer("(");

 

 

 

 

              buffer.append(getLength()).append(",");

 

 

 

 

              buffer.append(getWidth()).append(")");

 

 

 

 

              return buffer.toString();

 

 

 

 

       }

 

 

 

 

}

}

















1)创建如下类:
package com.forever.util;

import java.util.*;
import org.apache.commons.beanutils.*;
import java.text.SimpleDateFormat;

public class DateConvert implements Converter {
static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// HH:mm:ss

public DateConvert() { 


public Object convert(Class type, Object value) { 
if(value==null)return null; 
if(((String)value).trim().length()==0)
return null; 
if(value instanceof String) { 
try { 
//解析接收到字符串 
return df.parse((String)value); 
} catch (Exception ex) {
//发生解析异常
throw new ConversionException("输入的日期类型不合乎yyyy-MM-dd HH:mm:ss" + value.getClass()); 

} else { 
//其他异常 
throw new ConversionException("输入的不是字符类型" + value.getClass()); 

}
}

2)然后在你的系统某处使用如下(如web的init方法)
ConvertUtils.register(new DateConvert(),java.util.Date.class);
参数用于表示DateConvert类负责处理java.util.Date类型的转化。如:
package com.forever.util;

import org.apache.struts.action.ActionServlet;
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;

public class ActiveServlet extends ActionServlet {

/**
* 重载init()方法
* 为struts解析重新注册一些改造过的表单元素数据解析方法
*/
public void init() throws ServletException {
super.init();
ConvertUtils.register(new DateConvert(), java.util.Date.class);
}
}
3)在web.xml文件中加入或修改成如下内容:

< servlet >
< servlet-name >action< /servlet-name >
< servlet-class >com.forever.util.ActiveServlet< /servlet-class > 
< init-param >
< param-name >config< /param-name >
< param-value >/WEB-INF/struts-config.xml< /param-value >
< /init-param >
...........
< /servlet >

当用到BeanUtils.getProperty()时,碰到Date这种类型就发生转换

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 159
博文 2258
码字总数 4697248
作品 0
广州
程序员
探索python--Robert J. Brunner

IBM的developerworks中找到的关于python的连载,作者:Robert J. Brunner 是 National Center for Supercomputing Applications 的一名研究科学家和伊利诺斯州大学香槟分校的天文学助理副教授...

Rebecca.Hu
2012/09/27
0
0
PHP内核探索:Zend虚拟机

通过前面的学习,我们了解到一个PHP文件在服务器端的执行过程包括以下两个大的过程: 递给php程序需要执行的文件, php程序完成基本的准备工作后启动PHP及Zend引擎, 加载注册的扩展模块。 ...

旋转木马-千里马
2016/01/21
53
0
移动应用众测之“Bug探索测试”实战

认识老高 老高,BeeTest众测平台创始人,低调实干的测试业界专家,曾供职国内上市公司,现担任富海阳光公司CEO。15年以上金融IT从业经验,曾主持多个大型金融IT项目的测试咨询、设计、实施。...

qq5a4b38e1474ac
01/02
0
0
硅谷Spring项目组专家教你利用Spring Cloud构建微服务

src="https://mmbiz.qlogo.cn/mmbiz/tibrg3AoIJTuFDicicUn0SS2W0qcVsRz88M3ejbY1FyA14DNxZSK1iaRSMKTKKOQWP3zlyEJwZHy7wWoaGQl9ZML0Q/0?wxfmt=jpeg" data-ratio="0.6036363636363636" data-t......

Kenny Bastani
2016/07/05
0
0
德国航天局在欧洲最大火山测试机器人,执行火星探测任务

  【德国航天局在欧洲最大火山测试机器人,准备执行火星探测任务】拟被用于月球和火星探测任务的机器人日前在表面环境适宜的意大利埃特纳火山完成测试,它有3英尺高,有4个轮子。团队中的科学...

人工智能观察君
2017/07/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
28
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部