I am making a POST request as below :
$.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");
}
});
On the server, I am using @RequestParams to get this data.
@RequestParam String clientEmail, @RequestParam String clientName, @RequestParam String orgName, @RequestParam String logoURL, @RequestParam String redirectURI
I am getting below from from server:
{"code":"400","errorMessage":"Required String parameter 'clientEmail' is not present"}
If I use @RequestBody instead of @RequestParam to accept this data its working fine.
My question is How can I get this data in Request Parameters? What am I doing wrong? I have tried Jquery($.get(), $.post()) also. nothing working.
Thanks for any help.
I just did small project with latest version of spring boot and jquery and it is working well, and based on investigation I did I found there are 2 factor can make this issue, one from jquery and other one from Spring MVC converters:
1- jquery ajax have contentType parameter
contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')
if this one changed to application/json
or application/xml
will change the way it is sending request to server then will make issue to server parsing, but it is default value will send form as key=value
coma separated and this is OK with FormHttpMessageConverter
"which is drive us to next point"
2- spring MVC is using FormHttpMessageConverter
for "application/x-www-form-urlencoded"
parsing or converting then you can use @RequestParam
if this converter changed to other converter like:
MappingJackson2HttpMessageConverter
for 'application/json'
or
Jaxb2CollectionHttpMessageConverter
for 'application/xml'
so it will expect another request and you can get it using @RequestBody
So, you have to check request going from jquery is it form, json, or xml using development tools in your browser, then check you spring code/configuration to be sure that this request is converted by the FormHttpMessageConverter
, this converter could be changed by the parameters of your @RequestMapping
.