主动类型转换

遇到的问题: 做页面数据导入时,有日期字段,因为导入类的日期用的string接收,但是我转换实体类准备入库的时候,实体类字段类型是Date,无法转换成功,数据丢失

如果正常用BeanUtils.copyProperties(importData, data);是没法转成功的

只能单独针对日期字段做类型转换

应对这种情况,可以走以下2种方式

第一种方式: 手写工具类

java 复制代码
public static void copyAndConvertDates(Object source, Object target, String... dateFieldNames) {
    BeanUtils.copyProperties(source, target);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    for (String fieldName : dateFieldNames) {
        try {
            Field srcField = source.getClass().getDeclaredField(fieldName);
            Field tgtField = target.getClass().getDeclaredField(fieldName);
            srcField.setAccessible(true);
            tgtField.setAccessible(true);
            String dateStr = (String) srcField.get(source);
            if (dateStr != null && !dateStr.isEmpty()) {
                Date date = sdf.parse(dateStr);
                tgtField.set(target, date);
            }
        } catch (Exception e) {
            // 忽略或日志
        }
    }
}


//调用:
String[] dateFields = {"planStop","actualStop","planRepair","actualRepair","planWait","actualWait","planDrive","actualDrive","planCompletion","actualCompletion"};
copyAndConvertDates(importData, entity, dateFields);

但是如果字段太多,也感觉比较麻烦,而且容易写错

第二种方式: 引入ModelMapper

maven加入依赖

java 复制代码
// maven加入依赖
        <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>3.2.0</version>
        </dependency>

将对象丢给spring管理

java 复制代码
@Configuration
public class ModelMapperConfig {
    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }
}

应用

java 复制代码
@Autowired
private ModelMapper modelMapper;

modelMapper.map(importData, data);
相关推荐
ps酷教程31 分钟前
Jackson 解决没有无参构造函数的反序列化问题
java
NiceCloud喜云36 分钟前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
_日拱一卒2 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
隔窗听雨眠2 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
智慧物业老杨2 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
源码宝2 小时前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码
JAVA社区3 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
金銀銅鐵3 小时前
[Java] 如何理解 class 文件中方法的 descriptor?
java·后端
云烟成雨TD3 小时前
Spring AI Alibaba 1.x 系列【63】AI Agent 长期记忆
java·人工智能·spring
憧憬成为java架构高手的小白3 小时前
苍穹外卖--day09
java·spring boot·百度