json - 错误的请求 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。
解决方案
400 Bad Request 错误是一个 HTTP 状态代码,这意味着您发送到网站服务器的请求(通常是一些简单的请求,例如加载网页的请求)不知何故不正确或已损坏,服务器无法理解。
这意味着服务器无法理解来自您的 ajax 的请求。
首先,更改@RequestBody String chanceRewards
为@RequestBody ChanceRewards chanceRewards
并定义ChanceRewards
和ChanceReward
分类。
class ChanceReward {
private String name;
private String weight;
// Getter Setter ...
}
class ChanceRewards {
private List<ChanceReward> data;
// Getter Setter ...
}
如果仍然失败,请尝试打开检查模式并单击网络选项卡以检查从 ajax 发送的请求。
推荐阅读
- android - SimpleExoPlayer android中开始播放音乐的延迟
- apache - 基于 Apache 的 http 负载均衡
- git - 修订规范
^{ } - java - JodaTime 解析器在 America/Bahia_Banderas 时区崩溃
- c# - 通过 SDK 部署 Azure
- python - Python 到 Problog:数据不匹配?
- python - 通过将 pd.DataFrame 的列值添加为现有字典的键来创建嵌套字典
- sql - 如何在Oracle中将多选查询转换为案例语句
- arrays - 获取原始(字符串,数字)类型数组与自定义对象类型数组的长度是否存在运行时差异?
- scala - 将 yyyymmdd hh24miss 转换为 dd-mm-yyyy hh24:mi:ss