返回顶部
首页 > 资讯 > 后端开发 > Python >BeanUtils.copyProperties扩展--实现String转Date
  • 726
分享到

BeanUtils.copyProperties扩展--实现String转Date

2024-04-02 19:04:59 726人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

BeanUtils.copyProperties(target,source)和PropertyUtils.copyProperties(target,source)都能将源对象的属

BeanUtils.copyProperties(target,source)和PropertyUtils.copyProperties(target,source)都能将源对象的属性的值拷贝到目标对象相同属性名中。

区别在于:


BeanUtils.copyProperties(target,source)

支持基础类型、String、java.sql.Date、java.sql.Timestamp、java.sql.Time之间的类型转换,即只要这些类型的属性名相同那么拷贝就能成功。但是会默认初始化属性值。注意:不支持java.util.Date类型的转化,需手动设置。


PropertyUtils.copyProperties(target,source)

不支持类型转换,但是不会初始话属性值,允许属性值为null。

WEBservice中遇到了一个String类型,但是数据库是java.util.Date类型,因为对象属性不较多,所以在使用PropertyUtils.copyProperties(target,source)时报错。

后来查了下资料,说BeanUtils能进行类型转换,故而就自定义了一个String转Date的工具类。

定义工具类


package com.dhcc.phms.common.beanutils;
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
public class BeanUtilsEx extends BeanUtils{
  
  static {
      //注册util.date的转换器,即允许BeanUtils.copyProperties时的源目标的util类型的值允许为空
      ConvertUtils.reGISter(new DateConvert(), java.util.Date.class);
      ConvertUtils.register(new DateConvert(), String.class);
//      BeanUtilsBean beanUtils = new BeanUtilsBean(ConvertUtils.class,new PropertyUtilsBean());
 }
  
 public static void copyProperties(Object target, Object source) throws
        InvocationTargetException, IllegalAccessException {
      //支持对日期copy
 
   org.apache.commons.beanutils.BeanUtils.copyProperties(target, source); 
 }
}

定义日期转换格式


package com.dhcc.phms.common.beanutils;
import java.text.DateFORMat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
public class DateConvert implements Converter{
 
 @Override
 public Object convert(Class class1, Object value) {
  if(value == null){
   return null;
  }
  if(value instanceof Date){
   return value;
  }
  if (value instanceof Long) {
   Long longValue = (Long) value;
   return new Date(longValue.longValue());
  }
  if (value instanceof String) {
   String dateStr = (String)value;
   Date endTime = null;
   try {
    String regexp1 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9])T([0-2][0-9]):([0-6][0-9]):([0-6][0-9])";
    String regexp2 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9]) ([0-2][0-9]):([0-6][0-9]):([0-6][0-9])";
    String regexp3 = "([0-9]{4})-([0-1][0-9])-([0-3][0-9])";
    if(dateStr.matches(regexp1)){
     dateStr = dateStr.split("T")[0]+" "+dateStr.split("T")[1];
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     endTime = sdf.parse(dateStr);
     return endTime;
    }else if(dateStr.matches(regexp2)){
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     endTime = sdf.parse(dateStr);
     return endTime;
    }else if(dateStr.matches(regexp3)){
     DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
     endTime = sdf.parse(dateStr);
     return endTime;
    }else{
     return dateStr;
    }
   } catch (ParseException e) {
    e.printStackTrace();
   }
  }
  return value;
 }
}

使用时用BeanUtilsEx. copyProperties(target,source)时即可实现String转换为Date。

除此之外,如果需要转换的属性比较少时,可先将source对象中冲突属性取出来,另存一份,然后将该属性值置为null,因为不会拷贝null属性,所以拷贝的时候不会出错。当拷贝完成后再将冲突属性转换为所需格式,set进目标对象。这样也是实现效果。

测试代码如下:

目标对象TargetObject


package test;
import java.util.Date;
public class TargetObject {
 Date date;
 Boolean isOther;
 
 public TargetObject(Date date,Boolean isOther) {
  super();
  this.date = date;
  this.isOther = isOther;
 }
 
 public TargetObject() {
  super();
  // TODO Auto-generated constructor stub
 }
 
 public Date getDate() {
  return date;
 }
 
 public void setDate(Date date) {
  this.date = date;
 }
 
 public Boolean getIsOther() {
  return isOther;
 }
 
 public void setIsOther(Boolean isOther) {
  this.isOther = isOther;
 }
 
 @Override
 public String toString() {
  return "TargetObject [date=" + date + ", isOther=" + isOther + "]";
 }
 
}

源对象SourceObject


package test;
public class SourceObject {
 String date;
 String other;
 
 public SourceObject(String date,String other) {
  super();
  this.date = date;
  this.other = other;
 }
 
 public SourceObject() {
  super();
  // TODO Auto-generated constructor stub
 }
 
 public String getDate() {
  return date;
 }
 
 public void setDate(String date) {
  this.date = date;
 }
 
 public String getOther() {
  return other;
 }
 
 public void setOther(String other) {
  this.other = other;
 }
 
 @Override
 public String toString() {
  return "SourceObject [date=" + date + ", other=" + other + "]";
 } 
}

测试代码


public static void main(String[] args) { 
     SourceObject source = new SourceObject("2017-07-17","false");
     TargetObject target = new TargetObject();
     try {
   BeanUtilsEx.copyProperties(target,source);
   System.out.println(source.toString());//SourceObject [date=2017-07-17, other=false]
   System.out.println(target.toString());//TargetObject [date=Mon Jul 17 00:00:00 CST 2017, isOther=null]
   if(source.getOther().equals("true")) {//对于属性名不一样的属性是不会赋值的,需要手动设置
    target.setIsOther(true);
   }else {
    target.setIsOther(false);
   }
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
    }

BeanUtils.copyProperties 日期转字符 日期转Long

建立自己的日期转换类


import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.lang.time.DateUtils;
 
public class DateConverter implements Converter {
 private static final SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 @Override
 public Object convert(Class type, Object value) {
  if(value == null) {
         return null;
     }
     if(value instanceof Date) {
         return value;
     }
     if(value instanceof Long) {
         Long longValue = (Long) value;
         return new Date(longValue.longValue());
     }
        try {
            return dateFormat.parse(value.toString());
            //return DateUtils.parseDate(value.toString(), new String[] {"yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss","yyyy-MM-dd HH:mm" });
        } catch (Exception e) {
            throw new ConversionException(e);
        }
 }
}

使用自己的日期转换类替代默认的。如下面的main函数


public static void main(String[] args) {
                //替换
                ConvertUtils.register(new DateConverter(), Date.class);
  //ConvertUtils.register(new StrinGConverter(), String.class);
  A a = new A();
  a.date="2012-03-14 17:22:16";
  B b = new B();
  try {
   BeanUtils.copyProperties(b, a);
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  System.out.println(b.getDate());
 }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: BeanUtils.copyProperties扩展--实现String转Date

本文链接: https://lsjlt.com/news/128292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • BeanUtils.copyProperties扩展--实现String转Date
    BeanUtils.copyProperties(target,source)和PropertyUtils.copyProperties(target,source)都能将源对象的属...
    99+
    2024-04-02
  • exe转php:实现功能扩展的有效策略
    EXE转PHP:实现功能扩展的有效策略 随着互联网的发展,越来越多的应用程序开始向web化迁移,以实现更大范围的用户访问和更便捷的操作。在这个过程中,将原本以EXE(执行文件)方式运行...
    99+
    2024-03-04
    策略 功能扩展 转换 php脚本
  • 解决springboot 实体类String转Date类型的坑
    目录springboot 实体类String转Date类型Date解析String类型的参数springboot 实体类String转Date类型 前端传入一个String的时间字符...
    99+
    2024-04-02
  • php7扩展类怎么实现
    小编给大家分享一下php7扩展类怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在php7中,有许许多多的扩展类,今天我们就以person类为例实现doin...
    99+
    2023-06-20
  • Android实现扩展Menu的方法
    本文实例讲述了Android实现扩展Menu的方法。分享给大家供大家参考。具体如下: 1. java代码: package com.tabmenu; import andro...
    99+
    2022-06-06
    方法 Android
  • jQuery如何实现扩展功能
    这篇文章将为大家详细讲解有关jQuery如何实现扩展功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。扩展我们需要的功能$.extend({ min: func...
    99+
    2024-04-02
  • HTML5怎么实现Javascript API扩展
    本篇内容主要讲解“HTML5怎么实现Javascript API扩展”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5怎么实现Javascript API...
    99+
    2024-04-02
  • 如何实现C#扩展方法
    这篇文章将为大家详细讲解有关如何实现C#扩展方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在我们的编程生涯中我们要使用很多很多类库,这些类库有的是我们自己开发的,我们有她的代码,有的是第三方发布的,我...
    99+
    2023-06-17
  • WCF行为扩展怎么实现
    这篇文章主要讲解了“WCF行为扩展怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WCF行为扩展怎么实现”吧!WCF以其灵活的可扩展架构为开发者提供了方便,其中WCF行为扩展或许是应用...
    99+
    2023-06-17
  • Flask扩展实现HTTP令牌token
    Token认证 在restful设计中,用户认证模式通常使用json web token,而不会使用传统的HTTP Basic认证(传入账号密码) token认证模式如下:在请求header中加入token Flask中的实现 flas...
    99+
    2023-01-31
    令牌 Flask HTTP
  • VUE如何实现表头扩展
    今天小编给大家分享一下VUE如何实现表头扩展的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。ElementUI2.0的表格的扩...
    99+
    2023-07-04
  • WPF实现Interaction框架的Behavior扩展
    在WPF 4.0中,引入了一个比较实用的库——Interactions,这个库主要是通过附加属性来对UI控件注入一些新的功能,除了内置了一系列比较好用的功能外...
    99+
    2024-04-02
  • Kafka如何实现水平扩展性
    Kafka 实现水平扩展性的方法主要包括以下几个方面: 分区机制:Kafka 将数据分散存储在多个分区中,每个分区可以在不同的 ...
    99+
    2024-03-12
    Kafka
  • JavaScript基于扩展String如何实现替换字符串中index处字符
    小编给大家分享一下JavaScript基于扩展String如何实现替换字符串中index处字符,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去...
    99+
    2024-04-02
  • PHP扩展开发实战指南:从设计到实现,一步步构建PHP扩展
    1. PHP扩展概述 PHP扩展是一种将自定义功能添加到PHP语言中的机制,通过PHP扩展,开发人员可以构建自己的函数、类和常量,从而扩展PHP语言的功能。PHP扩展可以用于各种目的,例如: 添加对新数据类型的支持 添加对新函数的支持...
    99+
    2024-02-11
    PHP扩展 PHP扩展开发 PHP扩展设计 PHP扩展实现
  • Android实现可收缩和扩展的TextView
    在Android原生的TextView的基础上,可收缩/扩展的TextView:PhilExpandableTextView。 实现原理:核心是控制TextView的max ...
    99+
    2022-06-06
    扩展 Android
  • mybatis-plus扩展批量新增的实现
    目录前言一、MP如何扩展批量新增方法?二、实现步骤1.扩展批插类2.编写sql注入器3.spring容器中实例化sql注入器总结前言 最近发现公司的微服务项目中没有统一的批量新增方法...
    99+
    2023-01-09
    mybatis-plus 批量新增 mybatis-plus 新增
  • kafka可扩展性是怎么实现的
    Kafka的可扩展性是通过以下几个方面来实现的:1. 分布式架构:Kafka采用分布式架构,数据被分成多个分区(partition)...
    99+
    2023-08-12
    kafka
  • java虚拟扩展方法怎么实现
    这篇文章主要介绍“java虚拟扩展方法怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java虚拟扩展方法怎么实现”文章能帮助大家解决问题。1、Java8允许在界面中实现特定的方法,只需在方法...
    99+
    2023-06-30
  • Kafka的集群扩展性如何实现
    Kafka的集群扩展性可以通过以下几个方法实现: 水平扩展:Kafka集群可以通过添加更多的broker节点来实现水平扩展。新的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作