BeanUtils: заполнить поле карты в формате String Date для свойства Date - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть Map<String, Object>:

Map<String, Object> map = new HashMap<String, Object>();
map.put("date", "02/11/2018@11:29:03.463+0000");

Мой боб:

public class MyBean {
  private Date date;
  // setters & getters
}

Я пытаюсь заполнить свою карту бином:

MyBean bean = new MyBean();
BeanUtilsBean.getInstance().populate(bean, map);

Я получаю это сообщение об ошибке:

ConversionException: DateConverter не поддерживает стандартное преобразование строки в дату.

ВАЖНО : я не могу изменить формат строки.

Как я мог решить это?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы можете создать экземпляр DateTimeConverter и передать свои пользовательские шаблоны. Вот пример:

DateTimeConverter dateConverter = new DateConverter(null);
dateConverter.setPatterns(new String[] {"dd/MM/yyyy@HH:mm:ss.SSSZ"});
ConvertUtils.register(dateConverter, Date.class);
0 голосов
/ 02 ноября 2018

Вы должны зарегистрировать конвертер:

class MyDateConverter implements Converter {

private final DateFormat format = new SimpleDateFormat("dd/MM/yyyy@HH:mm:ss.SSSZ");

  public Object convert(Class type, Object value) {
    if(value == null) {
      return null;
    } else {
//    parse your date format with date formatter

 try {
            return format.parse((String) value);
        } catch (ParseException e) {
          throw new RuntimeException(e);
        }

        }
      }
    }

и используйте его как

ConvertUtilsBean convertUtilsBean = new ConvertUtilsBean();
convertUtilsBean.register(new MyDateConverter(), Date.class);

  BeanUtilsBean beanUtilsBean =
          new BeanUtilsBean(convertUtilsBean, new PropertyUtilsBean());

MyBean bean = new MyBean();
beanUtilsBean.populate(bean, map);
...