SpringMVC 类型转换

SpringMVC 类型转换

Spring引入通用的数据类型转换系统,其定义了SPI接口和相应的运行时执行类型转换的API,提供无状态、强类型其可以在任意类型之间进行类型转换,可以用于任何需要的地方(如SpEL、数据绑定等)

内置类型转换器

image

<!--开启类型转换服务-->
<mvc:annotation-driven conversion-service="conversionService"/>
<!--装配自定义转换类Bean-->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <bean class="com.tobie.converter.StringToDateConverter"/>
        </list>
    </property>
</bean>

自定义类型转换器

package com.tobie.converter;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author Tobieance
 * @description 自定义字符串到日期转换类
 * @date 2023-09-13 16:41
 */
@Component
public class StringToDateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        Date date = null;
        try {
            String pattern = "FALSE";
            String pattern1 = "\\d{4}-\\d{1,2}-\\d{1,2}";
            String pattern2 = "\\d{4}/\\d{1,2}/\\d{1,2}";
            if (s.matches(pattern1)) {
                pattern = "yyyy-MM-dd";
            } else if (s.matches(pattern2)) {
                pattern = "yyyy/MM/dd";
            } else {
                System.out.println(pattern);
                return null;
            }
            SimpleDateFormat format = new SimpleDateFormat(pattern);
            date = format.parse(s);
            //可以使用正则表达式判断日期字符串格式是否合法(支持yyyy-MM-dd和yyyy/MM/dd)
        } catch (Exception e) {
            e.printStackTrace();
        }
        return date;
    }

    //测试自定义类型转换器
    public static void main(String[] args) {
        //创建类型转换服务实例
        GenericConversionService genericConversionService = new GenericConversionService();
        //向类型转换服务实例中注册自定义类型转换器
        genericConversionService.addConverter(new StringToDateConverter());
        String dateString = "2023-09-01";
        Date date = genericConversionService.convert(dateString, Date.class);
        System.out.println(date);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值