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

Java 8 / Spring 4 MVC webapp / Maven / jQuery 3.3.1

Итак, я создал Spring MVC webapp, index.jsp которого использует вызов ajax.Обратите внимание, что я заменил устаревший jQuery на успех и ошибку для современного done и fail

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

jQuery.fn.serializeObject = function() {
  var arrayData, objectData;
  arrayData = this.serializeArray();
  objectData = {};

  $.each(arrayData, function() {
    var value;

    if (this.value != null) {
      value = this.value;
    } else {
      value = '';
    }

    if (objectData[this.name] != null) {
      if (!objectData[this.name].push) {
        objectData[this.name] = [objectData[this.name]];
      }

      objectData[this.name].push(value);
    } else {
      objectData[this.name] = value;
    }
  });

  return objectData;
};

function popupRuleDeck_update_submit() {
    var formJsonObj = $('#form_popupRuleDeck_update').serializeObject();
    var formJsonStr = JSON.stringify( formJsonObj);
    $.ajax({
      url: '${pageContext.request.contextPath}/ruleDeck_update',
      type: "post",
      dataType: "json",
      contentType: "application/json; charset=utf-8",
      data: formJsonStr
    }).done( function(response, message, xhr) {
        console.log("done entered")
        console.dir( response);
        var selectedRow = $('#ruleDeckTable > tbody > tr.selected')
        var selectedData = selectedRow.data();
        console.log( "selectedRowData: " + selectedRowData);
        console.log( "response.data: " + response.data() );
        $('#ruleDeckTable').row( selectedRow).data( response).draw();
        console.log("done exited")
    }).fail( function( xhr, status, response) {
        console.dir( "failed status:" + status);
        console.dir( "failed response:" + response);
        var returnedStr = JSON.stringify( response);
        $.each( response, function( key, val) {
            console.log("---" + key + ":" + val);
        });
        console.dir( "failed returnedStr:" + returnedStr);
        alert( "ruleDeck insert/update error: " + response)
      return false;
    });
}

на метод в моемконтроллер, аннотированный @Controller NOT @ RestController

@RequestMapping( value="/ruleDeck_update", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody RuleDeck ruleDeckUpdateUpdate( @RequestBody RuleDeck formRuleDeck)
{
    logger.info("entering ruleDeckUpdateUpdate");

    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);
    } catch (JsonProcessingException e) {
        // TODO Auto-generated catch block
        ruleDeck.setName( "JPE:" + e.getMessage());
    } catch ( Exception e) {
        ruleDeck.setName( "Exception:" + e.getMessage());
    }

    logger.info("exiting  ruleDeckUpdateUpdate");
    return ruleDeck;  //should be implicitly converted into json format and sent back to the request.
}     

Как и раньше, вызов ajax отправляет JSON методу, который находит и обновляет существующий объект, который сохраняетсяв базе данных, пока все хорошо.Метод выполняется без ошибок.Но теперь вызывается .fail (), и я вижу следующее в консоли браузера

failed status: error
failed response:
failed returnedStr:

Все это, похоже, указывает на то, что оператор return ruleDeck в конце моего метода java фактически возвращаетничего, или, может быть, пустая строка.Я в тупике.Я ожидаю, что ответом будет объект JSON в соответствии с сообщениями, такими как здесь

Или, возможно, лучший способ - это вернуть ResponseEntity (ruleDeck, HttpStatus.OK).Но тогда как мне прочитать это в браузере?

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

TIA,

code_warrior

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