【问题标题】:Ajax POST data in Request Param请求参数中的 Ajax POST 数据
【发布时间】:2016-11-27 17:39:17
【问题描述】:

我正在发出如下的 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()) 。没有任何工作。

感谢您的帮助。

【问题讨论】:

  • 您可以在浏览器开发者工具中看到它。在 chrome 上,这是在网络选项卡下。关于 spring 和 @RequestParams,我无法帮助你,但 jquery。
  • 谢谢,@Loenix。我得到了它。我的服务器配置有问题。

标签: javascript jquery ajax spring spring-annotations


【解决方案1】:

您不能将 $.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");
    }
});

【讨论】:

    【解决方案2】:

    我刚刚使用最新版本的 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 的参数进行更改。

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 2019-04-04
      • 2011-05-22
      • 2012-02-15
      • 2016-07-11
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多