Spring MVC Ajax 406坏请求

时间:2015-11-24 08:09:20

标签: jquery ajax spring

我有关于此错误的这些链接仍然是我的问题没有解决。HereHere,我已经检查了一些但是它们基于json。

首先,我告诉你,同样的代码在我的另一个项目中工作,事实是我已经在jsp和serlvets中实现了这个项目,并且在spring和hibernate中实现了这个项目。

问题来自于方法。什么时候回来。控制台400错误请求中出现一条消息。

这是我的方法

private void button4_Click(object sender, EventArgs e)
{
    IWshNetwork_Class network = new IWshNetwork_Class();

    network.MapNetworkDrive("k:", @"\\10.*.*.*\d$\test", Type.Missing, "local\\blabla", "*******");

    System.Diagnostics.Process.Start("file:///K:\\gemy.exe");

    //This is the closing part
    network.RemoveNetworkDrive("k:");
}

的Javascript

@RequestMapping(value = "/populateBillItems")
public @ResponseBody List<String> populateItems(@RequestParam String catName) {
    itemNames = productService.getItemNames(catName);
    return itemNames;
}

在调试模式下,我在eclipse中得到以下结果 Debug

您可以看到从数据库中检索到的值,但是当返回响应时,此错误会出现在控制台

function populateItems(obj){
    var itemCategory = obj.value;
    $.get('populateBillItems', {
        catName : itemCategory
    }, function(response) {

        var select = $('#itemName');
        select.find('option').remove();
        $.each(response, function(index, value) {
            $('<option>').val(value).text(value).appendTo(select);
        });
   });
}

这是第一个问题。

我在jquery中有另一个函数,它向控制器发送请求并获取id并在文本字段中填充它。它也会给出与上面给出的相同的错误..

 GET   http://localhost:8080/InventoryManagementSystemUsingSpring/populateBillItems?catName=Rice 406 (Not Acceptable)

接头:     enter image description here

问题几乎解决了。现在我得到了像我这样的响应方法的值

 function populateBillId(obj){
    var objValue=obj.value;
    var table="";
    if(objValue=='Borrower'){
        table="BorrowerBill";
        alert(table);
        $("#customerName").prop("readonly", true);
    }else if(objValue=='Customer'){
        $("#customerName").prop("readonly",false);
        table="CustomerBill";
    }
    $.get('populateBillId', {
        tableName : table
    }, function(response) {
        var id=response;
        $("#billId").val(id);
    });
 }


GET http://localhost:8080/InventoryManagementSystemUsingSpring/populateBillId?tableName=BorrowerBill

并像这样对JQuery进行了调整

@RequestMapping(value = "/populateBillItems")
public @ResponseBody String populateItems(@RequestParam String catName) {
    itemNames = productService.getItemNames(catName);
    String json=null;
    json = new Gson().toJson(itemNames);
    return json;
}

但现在的问题是我在选项

中也得到了(双引号)“”

这些是itemNames SelectBox和Id Textfield

中的引用

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为你的行动没有失败。

我看到你发现了HTTP 406消息。

您的后端服务表示客户端请求的Accept HTTP标头中未提供它返回的响应类型。

JSON作为application/json提供。您应该将其添加到标题中。

w3.org - 10.4.7 - 406 Not Acceptable

修改

在您的方法中,您将String返回到前端。尝试像这样转换json:

@RequestMapping(value = "/populateBillItems")
public @ResponseBody String populateItems(@RequestParam String catName) {
    itemNames = productService.getItemNames(catName);
    String json = new Gson().toJson(itemNames);
    System.out.println(json); // result before parsing
    json = new JsonParser().parse(json).getAsString();
    System.out.println(json); // result after parsing
    return json;
}