Spring Portlet Jquery Ajax публикует ошибку преобразования json dateTime

Этот вопрос связан с:

Публикация Spring Portlet Jquery Ajax в контроллере

Я отправляю форму из Jquery Ajax в Spring Portlet MVC Controller. Проблема заключается в том, что startTimestamp и endTimestamp являются dateTime в POJO. JSON отправляет его в виде строки, и преобразование не происходит. Ошибка:

SystemOut     O 14:10:16.040 [WebContainer : 2] DEBUG org.springframework.beans.BeanUtils - No property editor [org.joda.time.DateTimeEditor] found for type org.joda.time.DateTime according to 'Editor' suffix convention
    ...
SystemOut     O Error::Failed to convert property value of type 'java.lang.String' to required type 'org.joda.time.DateTime' for property 'startTimestamp'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.joda.time.DateTime] for property 'startTimestamp': no matching editors or conversion strategy found

Я также не могу отредактировать Pojo и добавить @DateTimeFormat, потому что Pojo создаются из XSD. Я также пытался добавить customObjectMapper, но ничего не работает. Любая помощь приветствуется.

function addNew() {

            var startDateEle = $('#start_date').val();
            var startTimeEle = document.getElementById("start_time");
            var startTime = startTimeEle.options[startTimeEle.selectedIndex].value;
            var startDate = new Date(startDateEle + ' ' +startTime);

            var endDateEle = $('#end_date').val();
            var endTimeEle = document.getElementById("end_time");
            var endTime = endTimeEle.options[endTimeEle.selectedIndex].value;
            var endDate = new Date(endDateEle + ' ' +endTime);

            var dataObject = {
                    'startTimestamp': startDate,
                    'endTimestamp': endDate,
                    'description': $('#0_message').val(),
                    'active': $("input[name=status]:checked").val()
                };
            $.ajax({
                url: "<%=addNewURL%>",
                type: 'POST',
                data: dataObject
            }).done(function(json){
                console.log(json);  
                //alert("json::"+json);
                alert("Success!");
            }).fail(function() {
                alert("OOPS! An error occured while processing your request. Please try again after sometime.");
            });
}

Контроллер:

@ResourceMapping(value = "addNewURL")
    public void addNew(@ModelAttribute(value = "dataObject") CustObj n,
                        BindingResult bindingResult, ResourceRequest request, ResourceResponse response, ModelMap model) throws Exception {

        if (!bindingResult.hasErrors()) {
        ...
         }
}

Пожалуйста помоги


person Harry    schedule 19.06.2015    source источник


Ответы (1)


Я смог решить проблему, добавив это в Controller. Основная причина, по которой мне пришлось это сделать, заключалась в том, что это был портлет MVC, и я не мог добавить аннотацию к POJO, поскольку они были сгенерированы из XSD:

       @InitBinder
       public void initBinder(WebDataBinder binder) {
             binder.initDirectFieldAccess();
             /* register appropriate date editor */
            String dateFormat = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z";
            binder.registerCustomEditor(DateTime.class, new DateTimeEditor(dateFormat, false));
       }
person Harry    schedule 23.06.2015