【发布时间】:2014-06-02 02:42:54
【问题描述】:
我在尝试使用 @RequestBody 将数据发布到 Spring Controller 时遇到错误 400
我的 Ajax 方法:
$(document).on('click', 'a[href|=#undo]', function () {
var i = $(this).attr('data-ref');
var uri = '/catalog/uso/undo/' + i;
var data = {"quantidade":$('.qntundo').val()};
console.log(JSON.stringify(data));
$.ajax({
url: uri,
type: 'post',
data: JSON.stringify(data),
dataType: 'json',
headers: {
"Content-Type": "application/json"
},
async: false,
......
数据产生这个:{"quantidade":"1"}
我的方法是这样的:
@RequestMapping(value = "/catalog/uso/undo/{id}",
method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public
@ResponseBody
String undo(@PathVariable("id") int id,
@RequestBody Integer qnt) {
//some logic here
}
我做错了什么,是我不能使用整数作为“身体”吗?或者我需要告诉@RequestBody 寻找“quantidade”,如果是这样,我该怎么做?
PS:我的 pom.xml 上有 Jackson 库,也有
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
在我的 Spring XML 中启用
【问题讨论】:
-
您的请求正文不是整数,它是具有单个整数字段的对象。尝试使参数成为一个对象,其中包含一个名为
quantidade的整数字段。 -
@Misha 我尝试了你所说的,将 JSON 字段与整数参数名称匹配,尝试了
JSON: qnt, Integer qnt和JSON: quantidade, Integer quantidade,但仍然出现错误 400 -
@Misha 我尝试使用 Object 并且我发现 @RequestBody 注释字段是一个 LinkedHashMap 并且它不能转换为 Integer
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.lang.Integer