Пользовательский преобразователь типа Struts не работает

У меня есть геттер/сеттер для переменной Date, например:

private Date registrationDate;

@TypeConversion(converter = "org.com.helper.DataHelper")
public Date getRegistrationDate() {
    return registrationDate;
}

@TypeConversion(converter = "org.com.helper.DataHelper")
public void setRegistrationDate(Date registrationDate) {
    this.registrationDate = registrationDate;
}

Как видите, я создал специальный преобразователь struts для преобразования входящей строки в формат Date и последующего ее назначения. Но, похоже, это не работает. Вот код для DateHelper:

public class DateHelper extends StrutsTypeConverter {

    private static final DateFormat FORMAT = new SimpleDateFormat("dd-MM-yyyy");

    @Override
    public Object convertFromString(Map arg0, String[] values, Class arg2) {
           try {
               System.out.println(values[0]+"called from datahelper");

                return FORMAT.parse(values[0]);
            } catch (Exception e) {
                throw new TypeConversionException(e.getMessage());
            }
    }

    @Override
    public String convertToString(Map arg0, Object value) {
        try {
            return FORMAT.format(value);
        } catch (Exception e) {
            throw new TypeConversionException(e.getMessage());
        }
    }

}

Я использую плагин struts2-json для получения и анализа данных формы. Этот плагин автоматически назначает все строковые значения, но у меня есть проблема с Date.

Вот как я получаю данные, передаваемые в Java из формы.

{"data":{"recordId":"123","registrationDate":"20-07-2016","hisId":"","herId":"","lastNameHe":"Asd","firstNameHe":"Asd","middleNameHe":"Asd","workPlaceHe":"","educationHe"}}

Итак, согласно моему пониманию, код перед началом установки registrationDate должен вызывать вспомогательный класс и преобразовывать строку в date, а затем вызывать установщик registrationDate.. но, похоже, это не работает.. Я даже поставил log вызовите вспомогательный код, но он не отображается в eclipse.


person Daler    schedule 21.07.2016    source источник


Ответы (1)


Похоже, что struts2-json-plugin не использует преобразования типов по умолчанию. :(

Для установки формата даты вы можете использовать аннотацию @JSON, которая имеет свойство format.

@JSON(format = "dd.MM.yyyy")
public void setRegistrationDate(Date registrationDate) {
    this.registrationDate = registrationDate;
}

Документация по плагину JSON — Настройка сериализации и десериализации.

person Aleksandr M    schedule 21.07.2016
comment
О, понятно ... странно, что ОП первым это замечает, тогда :) Хорошие вопросы и ответы - person Andrea Ligios; 21.07.2016
comment
@AndreaLigios Да, плагин json должен быть действительно реорганизован. - person Aleksandr M; 21.07.2016
comment
он говорит, что JSON не может быть преобразован в тип, и у меня нет доступных библиотек для импорта. Он предлагает использовать jacksonview.. - person Daler; 21.07.2016
comment
@Далер org.apache.struts2.json.annotations.JSON - person Aleksandr M; 21.07.2016
comment
он недоступен.. выдает ошибку при этом импорте... я должен добавить некоторые библиотеки в проект? странно.. кажется, мне не хватает stuts2-convention-plugin... блин - person Daler; 21.07.2016
comment
@Daler Должен поставляться с struts2-json-plugin - github.com/apache/struts/blob/STRUTS_2_3_24_1/plugins/json/src/. - person Aleksandr M; 21.07.2016
comment
странно... struts2-plugin работает нормально, как мы все знаем... но я не могу импортировать эту библиотеку... - person Daler; 21.07.2016
comment
@Далер Эклипс? Alt + F5, обновить. - person Aleksandr M; 21.07.2016
comment
мне потребовалось 2 дня, чтобы настроить весь json-плагин. теперь он работает, как и ожидалось, спасибо - person Daler; 21.07.2016