Spring Rest API 的 AJAX POST 方法不起作用

Posted

技术标签:

【中文标题】Spring Rest API 的 AJAX POST 方法不起作用【英文标题】:AJAX POST method to Spring RestAPI not working 【发布时间】:2021-01-19 14:25:18 【问题描述】:

我正在尝试使用 jQuery AJAX 将大量数据发送到我的服务器端,并将其发送到 Spring Framework 中的 RESTful 服务。并且表单是未知大小的数组,所以我试图让自动序列化工作。但我什至无法通过一个简单的测试示例来使用它。

似乎无法将我的 JSON 文件与输入类匹配。所以我一定做错了什么。但是根据我一直尝试遵循的教程,我无法看到我做错了什么。

这是我的 AJAX 调用

var test = JSON.stringify(
            name : "hallo", lastname : "there"
        );

        console.log(test);
        $.ajax(
            type: "POST",
            url: "/SpringTest_war_exploded/test",
            contentType: "application/json",
            data: test,
            success: function (returnValue) 
                console.log("success");
                console.log(returnValue);
            ,
            error: function (XMLHttpRequest, textStatus, errorThrown) 
                console.log (XMLHttpRequest);
                alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
            
        );

这是我的服务器端方法。

@PostMapping(value = "/test", consumes = "application/json")
@ResponseBody
public String testajax(@RequestBody TestAutoCreate  test)
    System.out.println("testajax");
    System.out.println(test.getName());
    return "hallo";

这是我要与之匹配的类

public class TestAutoCreate 
    private String name;
    private String lastname;

    public TestAutoCreate(String name, String lastname) 
        this.name = name;
        this.lastname = lastname;
    
    // the getters and setters 
    ...
 

这是我得到的错误消息

The origin server is refusing to service the request because the payload is in a format not supported by this method on the target resource.

如果我从服务器端方法中删除 @RequestBody TestAutoCreate 测试,则调用工作正常。只是

【问题讨论】:

尝试发送test变量而不对其进行字符串化(直接发送JSON对象) 【参考方案1】:

这里的问题

@PostMapping(value = "/test", consumes = "application/json")
@ResponseBody
public String testajax(@RequestBody TestAutoCreate  test)
    System.out.println("testajax");
    System.out.println(test.getName());
    return "hallo";

它是 RESTful 控制器,但返回视图。您必须返回 RESTful 响应,内容类型为 Content-Type: application/json

查看权限示例:https://spring.io/guides/tutorials/rest/

【讨论】:

我承认,我不太确定你说我应该改变什么?正如我在帖子中提到的,如果从“testajax”中删除输入参数,它会返回字符串“hallo”,没问题。只有当我尝试将其自动反序列化到“TestAutoCreate”类中时,我才收到错误消息,指出它找不到与我的请求匹配的内容。您发送的链接是我引用的教程之一,我试图遵循。但我对 Spring 很陌生,而且我承认,与教程相比,我不太确定自己做错了什么

以上是关于Spring Rest API 的 AJAX POST 方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

grails spring security rest /api/login 401 Unauthorized

远程托管时 Spring REST api 不起作用

REST API 中的 CSRF 令牌

Spring Boot文件上传示例(Ajax和REST)

跨域请求阻塞 Spring REST 服务 + AJAX

web api和rest api的区别