将JSON发送到Spring MVC - 错误415

时间:2016-02-13 01:15:45

标签: jquery json spring spring-mvc

我正在尝试将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)

2 个答案:

答案 0 :(得分:0)

您必须在控制器中的请求映射中添加MediaType,如下所示。

  public class NewTest1 extends config{

   @Test
    public void test1() {
    driver.get("http://www.google.com");
   }
  }

答案 1 :(得分:0)

eighter你在发送ajax请求时删除了数据类型 即,

  dataType : "json"

或者您必须按如下所示生成application / json响应

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

它将响应作为JSON对象与ajax响应dataType键匹配。 你可以使用其中任何一个。