SpringMVC-数据类型转换

本文介绍了在SpringMVC中如何自定义类型转换器,包括使用Formatter和Converter进行日期类型与字符串类型之间的转换。通过配置转换服务并实现相应接口,详细展示了转换器的实现过程,并提供了XML和注解两种配置方式的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义类型转换器

Converter类型转换器用于对象之间的类型转换
FormatterConverter的区别:
    作用相同,只是Formatter(格式化程序)的源类型必须是一个String类型,而Converter(转换器)可以是任意类型

String time = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(time);
Date date = new Date();
将日期类型转换成字符串类型           String str = sdf.format(date);
将字符串类型转换成日期类型           Date date1 = sdf.parse(str);

1、Formatter

配置

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="formatters">
        <set>
            <bean class="com.k2.自定义类型转换器.convert.DateFormatter"></bean>
        </set>
    </property>
</bean>
<!-- 自定义类型转换器装配-->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

实现DateFormatter接口
Formatter

public class DateFormatter implements Formatter<Date> {
    // 定义日期格式
    private String datePattern = "yyyy-MM-dd";
    // 声明simpleDateFormat
    private SimpleDateFormat simpleDateFormat;

    public Date parse(String s, Locale locale) throws ParseException {
        simpleDateFormat = new SimpleDateFormat(datePattern);
        return simpleDateFormat.parse(s);
    }

    public String print(Date date, Locale locale) {
        return new SimpleDateFormat().format(date);
    }
}

2、Converter

配置

<!-- 自定义类型转换器:xml方式 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <array>
            <bean class="com.k2.自定义类型转换器.convert.DateConverter"></bean>
            <bean class="com.k2.自定义类型转换器.convert.MyConvert"></bean>
        </array>
    </property>
</bean>

实现Converter接口
Converter<String, Date>

public class DateConverter implements Converter<String, Date> {

    // 定义日期格式
    private String datePattern = "yyyy-MM-dd";

    public Date convert(String source) {
        // 格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
        Date date = null;
        try {
            date = sdf.parse(source);
        } catch (ParseException e) {
            System.out.println("请按正确方式输入日期:yyyy-MM-dd");
        }
        return date;
    }
}
public class MyConvert implements Converter<String, Depart> {
    // 传入一个字符串的值,类型转换为depart类型
    public Depart convert(String s) {
        Depart depart = new Depart();
        String[] str = s.split(",");
        String id = str[0];
        String name = str[1];
        depart.setId(id);
        depart.setName(name);
        return depart;
    }
}

3、原生

@Controller
public class DateConverterTest {
    /**
     * 使用xml方式:需要配置DateConverter,在spring-mvc中配置     自定义类型转换器
     */
    @GetMapping("/getDate/{birthday}")
    public String getDate(@PathVariable() Date birthday) {
        System.out.println("日期转换成功:" + birthday);
        return "pages/success";
    }

    /**
     * 使用注解方式
     * 不用配置DateConverter,在spring-mvc中配置     注解方式<mvc:annotation-driven/>
     */
    @RequestMapping("/getDateAnn")
    public String getDateAnn(@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday) {
        System.out.println("日期转换成功:" + birthday);
        return "pages/success";
    }

    @RequestMapping("/customDate1")
    public String customDate(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date, Model model) {

        String time = "yyyy-MM-dd";
        SimpleDateFormat sdf = new SimpleDateFormat(time);

        Date date2 = new Date();
        // 将日期转换成字符串类型      sdf.format(date2);
        String sign_mark_id = sdf.format(date2);
        System.out.println("将日期转换成字符串类型:"+sign_mark_id);
        Date date1 = null;
        try {
            // 将字符串类型转换成日期类型        sdf.parse(sign_mark_id);
            date1 = sdf.parse(sign_mark_id);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("将字符串类型转换成日期类型:"+date1);
        System.out.println();
        model.addAttribute("date", date2);
        System.out.println(model.getAttribute("date"));
        System.out.println("date=" + date);
        return "pages/success";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_koen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值