【问题标题】:Spring MVC Ajax 406 bad requestSpring MVC Ajax 406 错误请求
【发布时间】:2015-11-24 08:09:19
【问题描述】:

我有关于此错误的这些链接,但我的问题仍未解决。HereHere,我检查了更多,但它们是基于 json 的。

首先,我告诉你,我的另一个项目中正在使用相同的代码,问题是我已经在 jsp 和 serlvets 中实现了该项目,而这个在 spring 和 hibernate 中实现。

问题是请求来自方法。当它返回时。控制台 400 错误请求中出现一条消息。

这是我的方法

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

Javascript

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);
        });
   });
}

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

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

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

这是第一个问题。

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

 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

标题:

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

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

像这样修改JQuery

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

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

但现在的问题是我也在选项中得到(双引号)“”

这些是 itemNames SelectBox 和 Id Textfield 中的引用

【问题讨论】:

  • 400 Bad Request 错误一般意味着服务器在请求中收到的属性导致了错误。我会检查您发送的内容以及服务器正在使用它做什么。您的 JS 代码不太可能是问题(除了缺少任何输入清理),我将从调试 productService.getItemNames 调用开始。
  • 请求正在发送到服务器,它甚至对其执行操作。但是在方法返回响应后,该消息来了。
  • 您可以看到结果显示从数据库中检索到项目。所以我认为它没有错误。
  • 您是否为路径定义了Consume 注释?看来您的服务需要特定的 Content-Type 标头
  • 也添加你的 pom.xml 文件!

标签: jquery ajax spring


【解决方案1】:

我认为你的操作没有失败。

我看到你收到了HTTP 406 消息。

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

JSON 被用作application/json。您应该将此添加到您的标题中。

w3.org - 10.4.7 - 406 Not Acceptable

编辑:

目前,在您的方法中,您将字符串返回给前端。尝试像这样转换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;
}

【讨论】:

  • 我已经编辑了我的问题,问题几乎解决了。
  • @MuhammadDanishKhan 你能在你的问题中显示你的双引号字符串/json吗?
  • 好的,我正在添加图片
  • @MuhammadDanishKhan 谢谢,但是否也可以显示字符串/json。
  • 我已经尝试过了,但它给出了类似于 [values] 中未定义的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多