在这里,请求的Param字符串为:


  firstName = jack&lastName = lily&gender = 1&foods = Steak&foods = Pizza'quote = Enter +您的+收藏夹+ quote!&education = Jr.High&tOfD = Day


映射类是:

public class Student {
    private String firstName;
    private String lastName;
    private Integer gender;
    private List<String> foods;
    private String quote;
    private String education;
    private String tOfD;

    getXxx()....;
    setXxx()....;
}


现在,我想编写一个通用的util类,将字符串转换为bean。

public final class InjectUtil<T> {
private static final Logger LOGGER = LoggerFactory.getLogger(InjectUtil.class);

public static <T> T converter2Obj(String source, Class<T> tClass) {
    T t = null;
    try {
        t = tClass.newInstance();

        if(source != null && source.length() > 0) {
            String[] fields = source.split("&");
            for(String field : fields) {
                String[] fieldKeyValue = field.split("\\=");
                String fieldKey = fieldKeyValue[0];
                String fieldValue = fieldKeyValue[1];
                // help
            }
        }
    } catch(InstantiationException | IllegalAccessException | InvocationTargetException e) {
        e.printStackTrace();
    }
    return t;
}


}

照顾好帮助,我如何使用BeanUtils转换器将“ foods = Steak&foods = Pizza”转换为List属性。

最佳答案

这是一种方法:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;

public final class InjectUtil<T> {
    // private static final Logger LOGGER =
    // LoggerFactory.getLogger(InjectUtil.class);

    public static <T> T converter2Obj(String source, Class<T> tClass) {
        T t = null;

        try {
            t = tClass.newInstance();
            Map<String, Object> params = new HashMap<String, Object>();
            if (source != null && source.length() > 0) {
                String[] fields = source.split("&");
                for (String field : fields) {
                    String[] fieldKeyValue = field.split("\\=");
                    String fieldKey = fieldKeyValue[0];
                    String fieldValue = fieldKeyValue[1];

                    if (params.containsKey(fieldKey)) {

                        //the key does not exist as yet
                        Object keyValueRetrieved = params.get(fieldKey);
                        if (keyValueRetrieved instanceof String) {
                            //key exists , it is single value that has been added now.
                            //change that now to a list to add more values
                            ArrayList<String> values = new ArrayList<String>();
                            values.add(keyValueRetrieved.toString());
                            values.add(fieldValue);
                            params.put(fieldKey, values);
                        } else {
                            //key exists , it is a list already. Add more values
                            ((ArrayList<String>) keyValueRetrieved).add(fieldValue);
                        }
                    } else {
                        params.put(fieldKey, fieldValue);
                    }

                }
            }
            BeanUtils.populate(t, params);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("--------------------------------------------");
        System.out.println(t.toString());
        System.out.println("--------------------------------------------");
        return t;
    }
}


您可以进行一些优化,希望可以给您一个想法

10-06 07:07