2015-03-21 4 views
5

Я столкнулся ошибку:AJAX POST на Spring MVC контроллер не работает

Failed to load resource: the server responded with a status of 415 (Unsupported Media Type)

AJAX часть моего кода выглядит следующим образом:

$.ajax({ 
    url: '/authentication/editUser',  
    type: "POST", 
    contentType: "application/json", 
    data: JSON.stringify(requestObj), //Stringified JSON Object 

    success: function(resposeJsonObject) { 
     // 
    } 
}); 

И метод обработчика контроллера:

@RequestMapping(value = "/editUser", method = RequestMethod.POST, 
    headers = {"Content-type=application/json"}) 
@ResponseBody 
public EditUserResponse editUserpost(@RequestBody EditUserRequest editUserRequest) { 
    System.out.println(editUserRequest); 
    return new EditUserResponse(); 
} 

Как устранить эту ошибку?

+0

Попробуйте передать тип содержимого в заголовках. –

+0

его сделано в вызове ajax как contentType: «application/json» –

+0

Я говорю, что он передал его отдельно в заголовках как 'headers: { 'Accept': 'application/json', 'Content-Type': ' application/json ' } ', что-то вроде этого. –

ответ

0

Изменить вызов AJAX, добавлять заголовки:

headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
} 

Ваш общий вызов AJAX должен выглядеть следующим образом:

$.ajax({ 
    url: '/authentication/editUser',  
    type: "POST", 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    } 
    dataType: "json", 
    data: JSON.stringify(requestObj), //Stringified JSON Object 

    success: function(resposeJsonObject) {    
     // 
    } 
}); 

Заголовок Content-Type используется @RequestBody, чтобы определить, какой формат данных, посылаемых ,

+0

такая же ошибка сохраняется - POST http: // localhost: 8080/authentication/editUser 415 (Unsupported Media Type) –

+0

Вы добавили 'dataType:" json ",' ? –

+0

да, я сделал это. –

1

вручную установить Content-Type и Accept в beforeSend обработчика вашей функции AJAX, и удалить заголовки вашей яровой методы обработчика контроллера, чтобы сделать его работу, как: функция

AJAX:

$.ajax({ 
    url: '/authentication/editUser', 
    type: 'POST', 
    data: JSON.stringify(requestObj), //Stringified Json Object 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Accept", "application/json"); 
     xhr.setRequestHeader("Content-Type", "application/json"); 
    } 
    success: function(resposeJsonObject){} 
}); 

и контроллер обработчик метод как:

@RequestMapping(value = "/editUser" , method = RequestMethod.POST) 
public @ResponseBody EditUserResponse editUserpost(@RequestBody EditUserRequest editUserRequest){ 
    System.out.println(editUserRequest); 
    return new EditUserResponse(); 
} 

Смотрите также:

0

Я думаю, вы должны попытаться удалить заголовок в контроллере, как это:

@RequestMapping(value = "/editUser" , method = RequestMethod.POST) 
0

Попробуйте это .. я изменил в контроллер и JQuery .. надеемся, что это будет работать

$.ajax({ 
     url: '/authentication/editUser',  
     type: "POST", 
     contentType: "application/json", 
     data: $("#FormName").serialize() 

     success: function(respose) { 
      // 
     } 
    }); 

A nd метод обработчика контроллера:

@RequestMapping(value = "/editUser", method = RequestMethod.POST, 
     headers = {"Content-type=application/json"}) 
// removed @RequestBody 
    @ResponseBody 
    public EditUserResponse editUserpost(EditUserRequest editUserRequest) { 
     System.out.println(editUserRequest); 
     return new EditUserResponse(); 
    } 
Смежные вопросы