Ajax POST数据在请求参数中

3
我正在进行以下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接受数据,它可以正常工作。但是我想知道如何在请求参数中获取这些数据?我做错了什么吗?我已经尝试过Jquery($.get(),$.post())等方式,但都没有成功。感谢任何帮助。

你可以在浏览器开发者工具中看到它。在Chrome中,这在网络选项卡下。 我无法帮你解决Spring和@RequestParams的问题,但是对于jQuery我可以提供帮助。 - Loenix
谢谢,@Loenix。我明白了。我的服务器配置出了些问题。 - Suraj
2个回答

4

我刚刚使用最新版本的Spring Boot和jQuery完成了一个小项目,一切正常运行。根据我所做的调查,我发现有两个因素可能会导致此问题,一个来自于jQuery,另一个来自于Spring MVC转换器:

1- jQuery ajax具有contentType参数

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

如果将此参数更改为application/jsonapplication/xml,将会改变向服务器发送请求的方式,进而导致服务器解析出现问题。但是,如果将其保留为默认值,则会以key=value逗号分隔的形式发送表单,这在使用FormHttpMessageConverter时没有问题,“这将引导我们进入下一个主题”。
2- Spring MVC使用FormHttpMessageConverter来解析或转换"application/x-www-form-urlencoded",然后就可以使用@RequestParam。如果此转换器更改为其他转换器,例如: MappingJackson2HttpMessageConverter用于'application/json'Jaxb2CollectionHttpMessageConverter用于'application/xml' 那么它将期望另一个请求,并且您可以使用@RequestBody获取它。
因此,您必须使用浏览器中的开发工具检查从jQuery发出的请求是否为表单、JSON或XML,然后检查您的Spring代码/配置以确保该请求由FormHttpMessageConverter 转换,而此转换器可能会被您的@RequestMapping参数所更改。

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");
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接