2016-02-13 4 views
1

Я пытаюсь отправить JSON из формы в контроллер весны mvc, но я всегда получаю ошибку 415.
Я уже пробовал изменять заголовки, типы, строки и т. Д. как сказано в других сообщениях, безуспешно.
Может ли кто-нибудь помочь? Я новичок в этом и все еще пытаюсь понять.Отправка JSON на Spring MVC - Ошибка 415

Основная функция страницы:

<script type="text/javascript"> 
function ConvertFormToJSON(form) { 
    var array = jQuery(form).serializeArray(); 
    var json = {}; 

    jQuery.each(array, function() { 
     json[this.name] = this.value || ''; 
    }); 

    return json; 
} 

jQuery(document).ready(function() { 
    jQuery('#novoitem').submit(function() { 

     var form = this; 
     var json = ConvertFormToJSON(form); 
     console.log(JSON.stringify(json)); 
     jQuery.ajax({ 
      dataType : "json", 
      contentType : "application/json", 
      type : "POST", 
      url : "inventario/", 
      data : JSON.stringify(json), 
      contentType : "application/json", 
      success : function(data) { 
       alert(data); 
      } 
     }); 

     return false; 
    }); 
}); 

Форма:

<form id="novoitem" method="post" enctype='application/json'> 
    <label for="usuario">Usuario:</label> 
    <input id="usuario" name="usuario" type="text"> 
    <label for="tipo">Tipo:</label> 
    <input id="tipo" name="tipo" type="text"> 
    <label for="nomeItem">Item:</label> 
    <input id="nomeItem" name="nomeItem" type="text"> 
    <label for="quantidade">Quantidade:</label> 
    <input id="quantidade" name="quantidade"type="text"> 
    <label for="vencimento">Vencimento:</label> 
    <input id="vencimento" name="vencimento" type="text"> 
    <input type="submit" value="Incluir"> 
</form> 

Контроллер:

@RequestMapping(value = "/inventario/", method = RequestMethod.POST) 
public ResponseEntity<Void> insereItem(@RequestBody Item item){...} 

console.log Stringify:

{"usuario":"a","tipo":"b","nomeItem":"c","quantidade":"d","vencimento":"e"} 

Ошибка:

POST http://localhost:8888/inventario/ 415 (Unsupported Media Type) 
+0

заменить: URL: «inventario и @RequestMapping (значение =„/ inventario“, метод = RequestMethod.POST) –

+1

решаемые просто положить все 3 Джексоном банки на пути к классам – ronssm

ответ

0

вы должны добавить MEDIATYPE в вашем отображении запроса в контроллере, как это.

@RequestMapping(value = "/inventario/",consumes = MediaType.APPLICATION_JSON, 
       method = RequestMethod.POST) 
public ResponseEntity<Void> insereItem(@RequestBody Item item){...} 
+0

Я должен добавить, как показано ниже, но все равно ошибка 415 @RequestMapping (value = "/ inventario", consumes = "application/json", method = RequestMethod.POST) – ronssm

+0

Не работает так же: @RequestMapping (value = "/ inventario", consumes = MediaType.APPLICATION_JSON_VALUE, производит = MediaType.APPLICATION_JSON_VALUE, метод = RequestMethod.POST) – ronssm

+0

вы можете поделиться своими данными запроса и кодом DTO Item? – Rakesh

0

eighter вы должны удалить тип данных во время передачи Ajax запрос т.е.

dataType : "json" 

или вы должны произвести реакцию приложения/JSON, как показано ниже

@RequestMapping(value = "/inventario/", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 

он будет дает как объект JSON, который сопоставляется с ключом dataType ajax response. вы можете использовать любой из них.

Смежные вопросы