вызов ajax отменяется для веб-приложения Spring MVC - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь отправить строку JSON в метод "foo_insert_udpate" в моем контроллере Spring MVC "BaseController", используя ajax-вызов jQuery.Сервер localhost запущен из моего сеанса Eclipse.

index.jsp --------

function popupFoo_update_submit() {
   aRowData = $('#form_popupFoo_update').serializeArray();
   var sRowData = JSON.stringify( aRowData);
   console.log( "sRowData is ", sRowData);
   $.ajax({
     url: 'foo_insert_update',
     type: "post",
     dataType: "json",
     contentType: "application/json; charset=utf-8",
     data: sRowData,
     success: function( response) {
         console.log( response);
         $('#fooTable').row( this).data( response).draw( false);    
     },
     error: function( e) {
         console.log(e);
         alert( "Error on update: " + e.message)
     }            
   });
}

BaseController -----

@RequestMapping(value="foo_insert_update", method = RequestMethod.POST)
public @ResponseBody String fooUpdateHandler( @RequestParam String json_InnString)
{
    logger.info("entering fooUpdateHandler with " + json_InnString);

    String json_OutString = null;
    // do stuff to populate json_OutString

    logger.info("exiting  fooUpdateHandler with " + json_OutString);
    return json_OutString;
} 

Функция js выполняется, sRowData заполняется, и вызывается ajax, в результате выполняется блок ошибок ajax, а e.messsage не определен, и поиск в файле журнала показывает, что fooUpdateHandler никогда не вводится ивкладка «консоль» моего chrome-отладчика показывает, что сообщение возвращает ошибку 400.

Любые идеи о том, как а) исправить и / или б) продолжить отладку этого?

TIA,

code_warrior

Ответы [ 2 ]

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

Решением было добавить contextPath к URL-адресу вызова ajax

url: '${pageContext.request.contextPath}/foo_insert_update',

Спасибо всем, кто ответил!

CASE CLOSED

code_warrior

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

попробуйте эту сокращенную реализацию вашего метода:

@RequestMapping(value="/foo_insert_update", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public String fooUpdateHandler(@RequestBody String json) {
    return json;
}

... аннотация @RequestParam может использоваться только для сопоставления параметров URL-адреса с аннотированным параметром метода, например, http://www.google.de?q = searchphrase (q является параметром запроса со значением 'searchparam') - вы хотите отобразить объект JSON, который будет отправлен в теле вашего HTTP-запроса ... поэтому вы должны использовать Spring * @RequestBodyаннотацию!

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