Request Param中的Ajax POST数据

时间:2016-07-24 07:40:45

标签: javascript jquery ajax spring spring-annotations

我正在发出如下的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())。没什么用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我刚刚用最新版本的spring boot和jquery做了一个小项目,它工作得很好,根据调查,我发现有2个因素可以解决这个问题,一个来自jquery,另一个来自Spring MVC转换器:

1- jquery ajax有contentType参数

contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')

如果将此更改为application/jsonapplication/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");
    }
});