Spring MVC метод не возвращает строку JSON при вызове jQuery ajax - PullRequest
0 голосов
/ 26 сентября 2018

Java 8 / Spring 4 / Maven / jQuery

Поэтому я создал веб-приложение Spring MVC, в котором index.jsp использует вызов ajax

--- фрагмент index.jsp ----

function popupRuleDeck_update_submit() {
   var formJsonStr = $('#form_popupRuleDeck_update').serialize();
   $.ajax({
     url: '${pageContext.request.contextPath}/ruleDeck_update',
     type: "post",
     dataType: "json",
     contentType: "application/json; charset=utf-8",
     data: formJsonStr,
     success: function( response) {
         $('#ruleDeckTable').row( this).data( response).draw( false);
         return true;
     },
     error: function( response) {
         console.log( response);
         alert( "ruleDeck update error: " + response.message)
         return false;
     }            
   });
}

к методу в моем контроллере

@RequestMapping( value="/ruleDeck_update", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody AjaxResponseBody ruleDeckUpdateHandler( @RequestBody RuleDeck formRuleDeck)
{
    AjaxResponseBody result = new AjaxResponseBody( false, "FAILED");

    RuleDeck ruleDeck = null;

    try {
        ruleDeck = tryThisService.findOneRuleDeck( formRuleDeck.getId());
        ruleDeck.setRuleDeckId( formRuleDeck.getRuleDeckId());
        ruleDeck.setRevision( formRuleDeck.getRevision());
        ruleDeck.setName( formRuleDeck.getName());
        ruleDeck.setDeckType( formRuleDeck.getDeckType());
        ruleDeck.setFileLocation( formRuleDeck.getFileLocation());
        ruleDeck = tryThisService.updateOneRuleDeck( ruleDeck);
        result.setStatus( true);
        result.setMessage("update successful");
    } catch (JsonProcessingException e) {
         result.setMessage( "JPE:" + e.getMessage());
    } catch ( Exception e) {
         result.setMessage( "Exception:" + e.getMessage());
    }

    return result;  //should be implicitly converted into json format and send back to the request.
}     

где

public class AjaxResponseBody {

    @JsonView
    private boolean status;

    @JsonView
    private String message;

    // assorted constructors, getters, setters omitted...
}

У меня есть зависимость привязки данных Джексона в моем pom.xml

Я не настроил явно конвертеры сообщений Http / Json / Xml.

Я использовал эту страницу в качестве шаблона.

Вызов ajax отправляет JSONМетод, который действительно находит и обновляет существующий объект, который сохраняется в базе данных, пока что хорош.Метод выполняется без ошибок.Но вызов ajax всегда попадает в функцию ошибки, и ответ кажется неопределенным, как если бы метод фактически не возвращал сериализованный объект AjaxResponseBody.Очевидно, что цель здесь состоит в том, чтобы удостовериться, что функция успеха получит удар, когда метод не выдает ошибок, и нажать на функцию ошибок и извлечь сообщение об ошибке, когда метод выдает ошибку.

Или есть какой-то лучший шаблонЯ должен использовать?

TIA,

code_warrior

1 Ответ

0 голосов
/ 26 сентября 2018

Может быть, вы используете jQuery> = 3.0 и вам следует использовать методы done() вместо success() и fail() вместо error()?

В документации jQuery:

Примечание об устаревании: обратные вызовы jqXHR.success (), jqXHR.error () и jqXHR.complete () удалены с jQuery 3.0.Вместо этого вы можете использовать jqXHR.done (), jqXHR.fail () и jqXHR.always ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...