首页 > 解决方案 > 错误的请求 AJAX 发布到 Spring API

问题描述

我正在向我的 Spring API 发送 JSON 数据,但我总是收到一个错误的请求。我已经尝试了一些东西。起初,chanceReward是类型Map<String, Object>。后来我认为它应该是一个String,但它仍然有一个不好的要求。我研究并认为我需要consumes = "application/json"注释,但结果是一样的。不知道该怎么办了。以下是我的 API 的代码:

@RequestMapping(value = "/chance/{id}/saveChanceRewards", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
public @ResponseBody Map<String, Object> saveChanceRewards(@PathVariable("id") String id,
        @RequestBody String chanceRewards) {

    try {
        JSONArray jsonArray = new JSONArray(chanceRewards);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject JObject = jsonArray.getJSONObject(i);
            System.out.println(JObject.getString("name") + " " + JObject.getString("weight"));
        }
    } catch(JSONException e) {
        _log.error("Error parsing JSON");
    }

    Map<String, Object> map = new HashMap<String, Object>();
    // TODO

    return map;
}

下面是 ajax 代码(在 .jsp 中):

    let arrayRewards = [];
    // get the data from dynamic list of text fields
    for (let i = 1; i <= chanceRewardCount; i++) {
        arrayRewards.push({
            name: $('#chanceRewardName' + i).val(),
            weight: $('#chanceRewardWeight' + i).val()
        });
    }

    let data = {'data': arrayRewards};
    let jsonData = JSON.stringify(data);

    $.ajax({
        type: 'post',
        dataType: "json",
        data: data,
        contentType: 'application/json',    
        url: "${home}/chance/${id}/saveChanceRewards",
        method: 'post',
        success: function(response) {
            console.log('response', response);  
        },
        error: function(err) {
            console.log('error', err);
        }
    });

我正在使用 Spring Framework 3.2.1。

标签: jsonajaxspringjsppost

解决方案


400 Bad Request 错误是一个 HTTP 状态代码,这意味着您发送到网站服务器的请求(通常是一些简单的请求,例如加载网页的请求)不知何故不正确或已损坏,服务器无法理解。

这意味着服务器无法理解来自您的 ajax 的请求。

首先,更改@RequestBody String chanceRewards@RequestBody ChanceRewards chanceRewards

并定义ChanceRewardsChanceReward分类。

class ChanceReward {

    private String name;

    private String weight;

    // Getter Setter ...

}

class ChanceRewards {

    private List<ChanceReward> data;

    // Getter Setter ...

}

如果仍然失败,请尝试打开检查模式并单击网络选项卡以检查从 ajax 发送的请求。


推荐阅读