2016-08-23 3 views
1

Здесь запрос Param строка:Как использовать конвертер BeanUtils в список?

ПгвЬЫат = Гнездо & LastName = лилия & пола = 1 & продуктов = стеки & еда = Pizza & цитаты = Enter + Ваш + любимая + цитаты! & образования = Jr.High & TOFD = День

И Подключенный класс:

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, чтобы преобразовать строку в боб.

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 нейтрализатор "еда = стейк & еда = Pizza" в атрибут List.

ответ

0

Вот способ сделать это:

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; 
    } 
} 

Есть оптимизаций, которые можно сделать, надеюсь, это дает вам представление о

0

Вы можете использовать, как указано ниже, вам нужно заполнить список продуктов (значениями [Стейк, пицца]), а затем установить в bean-компонент, используя следующий метод.

PropertyUtils.setProperty(studentBean, "foods", foodList); 

или

BeanUtils.setProperty(studentBean, "foods", foodList); 
Смежные вопросы