数据类型转换器——String转Date为例

Springmvc默认数据类型转换器并不能支持所有的类型转换,所以当我们需要某种他所不能支持的类型转换时,我们可以自定义创建数据类型转换器。

例如。在学习过程中都会遇到的提交日期问题,前端传String,到后端我们将他变为Date对象。

在提交下面这个表单时。我们输入的是String类型的数据。

<form action="./userinfo/add.do">
    <input name="birth" placeholder="生日" />
    <input  type = "submit" value="提交"/>
</form>

 而在vo类里面存放的birth为一个日期对象类

private Date birth;

 假如我们这个时候进行直接提交。会出现400的错误。

这时我们就需要自定义一个数据类型转换器。 分三步走战略。

 

首先第一步。我们先定义一个数据类型转换器。并把它放入ioc容器中。下面定义的是String 转 Date 类型。

@Component
public class DateConverter implements Converter<String, Date> {

	public Date convert(String birth) {
		if(birth!=null && !"".equals(birth)) {
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
			try {
				dateFormat.parse(birth);
			} catch (ParseException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
}

 

第二部。我们再Spring 配置文件中将 这个DateConverter 类放入ConversionServiceFactoryBean的converters里面。

<bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
	<property name="converters">
		<set>
			<ref bean="dateConverter"/>
		</set>
	</property>
</bean>

第三步。加载到mvc:annotation-driven上面。

<mvc:annotation-driven conversion-service="conversionServiceFactoryBean"></mvc:annotation-driven>

至此数据类型转换器创建完毕,我们就可以放心的使用他了。

 

 

### 解决 EasyExcel 数据导入中的数据类型换 为了确保在使用 EasyExcel 进行数据导入时能够正确处理不同类型的数据,可以采取多种策略来实现有效的数据类型换。 #### 使用自定义转换器解决 long 类型数据精度丢失问题 对于 `long` 类型的数据,在读取过程中可能会因为默认解析方式而导致精度损失。为此可以通过创建自定义转换器的方式解决问题[^1]: ```java public class LongConverter implements Converter<Long> { @Override public Class<?> supportJavaTypeKey() { return Long.class; } @Override public CellDataTypeEnum supportExcelTypeKey() { return CellDataTypeEnum.NUMBER; } /** * 将字符串形式的数值化为Long对象 */ @Override public Long convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { String value = (String)cellData.getStringValue(); return Long.parseLong(value); } } ``` 此代码片段展示了如何构建一个专门用于处理 `long` 型字段的换逻辑,从而避免了潜在的小数点截断风险保持原始数据完整性。 #### 处理日期格式的数据 当面对来自 Excel 文件内的日期信息时,则需特别注意其存储模式以及目标 Java 实体类属性之间的映射关系。通常情况下建议采用如下所示的方法来进行适配操作[^3]: ```java @DateTimeFormat(pattern="yyyy-MM-dd") // 或者其他所需的时间样式 private Date dateField; // 对应于实体类成员变量上的注解配置 @Data public static class DataModel{ private String name; @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") private LocalDateTime dateTime; } ``` 上述子说明了怎样利用 Spring 提供的 `@DateTimeFormat` 注释标记配合特定时间表达式完成自动化的日期解析工作;当然也可以根据实际需求调整 pattern 参数值以匹配不同的输入源格式。 #### 配置全局监听器或局部处理器 除了针对单个字段设置特殊规则外,还可以考虑在整个文档级别引入统一管理机制——即通过继承 `AnalysisEventListener<T>` 接口定制专属事件响应程序,将其传递给 `ExcelReader.Builder` 构造函数作为参数之一参与后续流程控制[^4]: ```java new ExcelReader(inputStream, ExcelTypeEnum.XLSX, new AnalysisEventListener<DataModel>() {/*...*/}) ``` 这种方式允许开发者更加灵活地介入到每一行记录被加载后的即时状态评估环节当中,进而实施更为复杂精细的操作比如异常捕获、业务校验等附加功能模块集成进来。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值