我正在发出如下 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()) 。没有任何效果。
感谢您的帮助。
最佳答案
我刚刚用最新版本的 spring boot 和 jquery 做了一个小项目,它运行良好,根据调查,我发现有两个因素可以导致这个问题,一个来自 jquery,另一个来自 Spring MVC 转换器:
1- jquery ajax 有contentType 参数
contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')
如果这个更改为 application/json
或 application/xml
将改变它向服务器发送请求的方式然后将对服务器解析产生问题,但它是默认值将以 key=value
逗号分隔的形式发送表单,这对于 FormHttpMessageConverter
是可以的,“这将把我们带到下一个点”
2- spring MVC 使用 FormHttpMessageConverter
进行 "application/x-www-form-urlencoded"
解析或转换,然后你可以使用 @RequestParam
如果此转换器更改为其他转换器,例如:
MappingJackson2HttpMessageConverter
for 'application/json'
或
Jaxb2CollectionHttpMessageConverter
for 'application/xml'
因此它将期待另一个请求,您可以使用 @RequestBody
因此,您必须使用浏览器中的开发工具检查来自 jquery 的请求是表单、json 还是 xml,然后检查您的 spring 代码/配置以确保此请求由 FormHttpMessageConverter< 转换
,此转换器可以通过您的 @RequestMapping
的参数进行更改。
关于javascript - 请求参数中的 Ajax POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38549794/