自定义日期类型转换

本文介绍在Struts框架中如何自定义日期类型转换器,通过实现StrutsTypeConverter类,可以将特定格式的字符串转换为Java.util.Date类型,适用于表单数据提交场景。

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

struts中提供一个自定义类型的转换,比如这里面的日期,默认转换2019-9-12,如果写成2019/9/12则会报错

  1. struts的字符串类型转换是由一个类com.opensymphony.xwork2.conversion.impl.StringConverter类来完成的
  2. 日期类型转换是由com.opensymphony.xwork2.conversion.impl.DateConverter来完成

所以如果自己想修改转换格式的话,可以自定义一个转换器

源码分析得出,如果要自己写一个类型转换

  1. 可以实现DefaultTypeConverter抽象类
  2. 我们一般也可以用它的子类StrutsTypeConverter来实现

写一个MyDateConverter,测试一下这里面的方法参数分别为什么东西

package convert;

import org.apache.struts2.util.StrutsTypeConverter;

import java.util.Map;

public class MyDateConverter extends StrutsTypeConverter {
    /**
     * 将字符串转化为对象类型
     * @param map
     * @param strings
     * @param aClass
     * @return
     */
    @Override
    public Object convertFromString(Map map, String[] strings, Class aClass) {
        System.out.println(aClass);
        for (String s:strings) {
            System.out.println(s);
        }

        return null;
    }

    /**
     * 将对象类型转化为字符串
     * @param map
     * @param o
     * @return
     */
    @Override
    public String convertToString(Map map, Object o) {
        return null;
    }
}

然后在模型包下面创建一个配置文件,命名为  : 模型名-conversion.properties

上面那个是默认的struts规定的转换器配置文件格式,配置文件中写想要转换的模型中的属性,以及依赖的转换器

birthday=convert.MyDateConverter

这里面的birthday是User里面的一个属性

启动服务器,提交表单数据,查看控制台,发现输出如下:

class java.util.Date
2019/2/4
User{username='hh', password='123', birthday=null, hobby='唱歌,code', married=false}

由输出来看这里的aClass是目的转换类型所依赖的类

第二行是待转换的数据

第三行中birthday为null,是因为这里面的转换器的转换方法,返回的值为null

下面演示如何自定义一个转换器,将自定义格式的字符串转化为Date类型的

package convert;


import org.apache.struts2.util.StrutsTypeConverter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

public class MyDateConverter extends StrutsTypeConverter {
    /**
     * 将字符串转化为对象类型
     * @param map
     * @param strings
     * @param aClass
     * @return
     */
    @Override
    public Object convertFromString(Map map, String[] strings, Class aClass) {
        if (strings!=null&&strings.length>0){
            //取数据
            String dateStr=strings[0];
            if ("".equals(dateStr)){
                return null;
            }

            //转换
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
            try {
                return sdf.parse(dateStr);
            } catch (ParseException e) {
                e.printStackTrace();
                throw new RuntimeException(e);//转换异常
            }
        }

        return null;
    }

    /**
     * 将对象类型转化为字符串
     * @param map
     * @param o
     * @return
     */
    @Override
    public String convertToString(Map map, Object o) {
        return null;
    }
}

在这里面为了使项目中所有Date类型的数据转换器全依靠这个转换器,可以在src的根路径下面创建一个配置文件xwork-conversion.properties,在配置文件中写:

java.util.Date=convert.MyDateConverter

这样就使得全局中的Date类型数据转化都使用这个转换器

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值