ConvertUtils工具类

实际上,BeanUtils是依赖ConvertUtils来完成实际上的类型转换,但是有时候我们可能需要自定义转换器来完成特殊需求的类型转换;

自定义类型转换器步骤:

1、定义一个实现类实现Converter接口

2、调用ConvertUtils.register方法,注册该转换器
如下是一个实例,我们会在字符串转换的时候,加上一个前缀

package com.wyy.controller;

import com.wyy.pojo.User;
import com.wyy.utils.MyStringConverter;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author yuanyuan.wang
 * @date 2019/12/18
 */
@Controller
public class StringConverter {

    @GetMapping("/stringConverter")
    @ResponseBody
    public String DoStringConverter() throws InvocationTargetException, IllegalAccessException {
        ConvertUtils.register(new MyStringConverter(),String.class);

        Map<String,String> map = new HashMap<>();
        map.put("id","001");
        map.put("username","as");
        map.put("password","as");

        User user = new User();
        BeanUtils.populate(user,map);

        return "stringConverter";
    }
}
package com.wyy.utils;

import org.apache.commons.beanutils.Converter;

/**
 * @author yuanyuan.wang
 * @date 2019/12/18
 */
public class MyStringConverter implements Converter {

    @Override
    public Object convert(Class aClass, Object o) {
        if(String.class.isInstance(o)) {
            return "##"+o;
        }else {
            return o;
        }
    }
}

在这里插入图片描述
这里有一点需要注意,像BeanUtils, ConvertUtils 和 PropertyUtils工具类都是共享同一个转换器的,这样子虽然用起来很方便,但有时候显得不够灵活,实际上BeanUtils, ConvertUtils 和 PropertyUtils都有一个对应的可实例化的类,即BeanUtilsBean、ConvertUtilsBean、PropertyUtilsBean;

它们的功能与BeanUtils, ConvertUtils 和 PropertyUtils类似,区别是它们可以实例化,而且每个实例都可以拥有自己的类型转换器

注册日期转换器

参考文档链接:http://blog.sina.com.cn/s/blog_3eb047df0100o5u2.html

package com.wyy.controller;

import com.wyy.pojo.Order;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author yuanyuan.wang
 * @date 2019/12/18
 */
@Controller
public class DateConverter {

    @GetMapping("/dateConverter")
    @ResponseBody
    public String DoDateConverter() throws InvocationTargetException, IllegalAccessException {
        Order bean = new Order();

        //注册日期转换器
        ConvertUtils.register(new Converter(){
            @Override
            public Object convert(Class type, Object value) {
                if(value==null){
                    return null;
                }
                if(!(value instanceof String)){
                    throw new ConversionException("只支持字符串的转换");
                }
                String date = (String) value;
                if(date.trim().equals("")){
                    return null;
                }
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                try {
                    return df.parse(date);
                } catch (ParseException e) {
                    throw new ConversionException(e);
                }
            }
        }, Date.class);
        BeanUtils.setProperty(bean, "id", "001");
        BeanUtils.setProperty(bean, "date", "1111-11-11");  //beanutils框架会自动对数据进行转换
        System.out.println(bean.getDate()); //date.toString()
        return "dateConverter";
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值