java@RequestBody在Spring中总是空的
对于下面的方法,JSONObject总是空的
@RequestMapping(value = "/package/{id}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public SPackage updatePackage(@PathVariable String id, @RequestBody JSONObject
sPackage) {
}
我的ajax就是这样。我正在服务器端以空映射的形式获取对象
var jsonObject= {"customerName":$('#customerName').val()}
var jsonData = JSON.stringify(jsonObject);
$.ajax({
type: "PUT",
url: "http://localhost:8081/someproj/package/" + $('#id').val(),
dataType: "json",
data: jsonData,
async: false,
contentType: "application/json; charset=utf-8",
beforeSend : function() {
openModal();
},
success: function(data) {
closeModal();
$('#success').show();
console.log(data);
}
});
# 1 楼答案
我猜
spring
不知道如何将json
转换为JSONObject
,最好的办法是接受一个与json
结构相似的POJO object
# 2 楼答案
您可以使用以下解决方法:
这样,您就可以继续使用Jackson HttpMessageConverter,并处理负载中的自定义对象
你可以在这里的答案中查看为什么会发生这种情况的扩展解释
@RequestBody gives empty JsonObject when making a POST Request
# 3 楼答案
您确定Spring代码中没有出现异常吗。在Spring中将JSON转换为自定义对象时,需要指定一个具有相同字段的自定义类&;格式为JSON格式。否则,Spring不知道该由谁将HTTP POST数据转换为Java对象
在您的情况下,您可以这样定义POJO:
把这个放在你的控制器类中:
当然,如果您只想将客户名称作为字符串传递给控制器,那么您也可以将其作为查询字符串(append?customerName=someCustomer)传递,并在Spring中检索它,如下所示: