我正在发出如下的POST请求:
$.ajax({
url :"/clientCredentials.json",
type: "POST",
data: {
"clientEmail": email,
"clientName":clientName,
"orgName":orgName,
"logoURL":logoURL,
"redirectURI":redirectUri
},
success: function(response){
alert("sucess");
},
error:function(response){
alert("something went wrong");
}
});
在服务器上,我使用@RequestParams获取此数据。
@RequestParam String clientEmail, @RequestParam String clientName, @RequestParam String orgName, @RequestParam String logoURL, @RequestParam String redirectURI
我从服务器获取以下内容:
{"code":"400","errorMessage":"Required String parameter 'clientEmail' is not present"}
如果我使用@RequestBody而不是@RequestParam来接受这些数据,那么它的工作正常。
我的问题是如何在请求参数中获取此数据?我究竟做错了什么? 我也尝试过Jquery($。get(),$ .post())。没什么用。
感谢您的帮助。
答案 0 :(得分:3)
我刚刚用最新版本的spring boot和jquery做了一个小项目,它工作得很好,根据调查,我发现有2个因素可以解决这个问题,一个来自jquery,另一个来自Spring MVC转换器:
1- jquery ajax有contentType参数
contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')
如果将此更改为application/json
或application/xml
将改变向服务器发送请求的方式,则会对服务器解析产生问题,但默认值将发送为{{1}的表单}昏迷分开,这对key=value
&#34来说没问题;这将驱使我们进入下一点"
2- spring MVC正在使用FormHttpMessageConverter
进行FormHttpMessageConverter
解析或转换,如果此转换器更改为其他转换器,则可以使用"application/x-www-form-urlencoded"
:
@RequestParam
的 MappingJackson2HttpMessageConverter
或
'application/json'
的 Jaxb2CollectionHttpMessageConverter
所以它会期待另一个请求,您可以使用'application/xml'
因此,您必须使用浏览器中的开发工具检查来自jquery的请求是form,json还是xml,然后检查spring代码/配置以确保@RequestBody
转换此请求,此转换器可以通过FormHttpMessageConverter
。
答案 1 :(得分:2)
你不能使用带有效负载(数据)的$ .get但你可以使用$ .post。请在您的请求参数中添加 contentType 属性。
$.ajax({
url :"/clientCredentials.json",
type: "POST",
contentType: "application/json",
data: {
"clientEmail": email,
"clientName":clientName,
"orgName":orgName,
"logoURL":logoURL,
"redirectURI":redirectUri
},
success: function(response){
alert("sucess");
},
error:function(response){
alert("something went wrong");
}
});