【问题标题】:How to fix Spring boot controller getting null data from AJAX DELETE request?如何修复 Spring Boot 控制器从 AJAX DELETE 请求中获取空数据?
【发布时间】:2019-08-16 07:45:03
【问题描述】:

我尝试过使用@QueryParam、@PathVariable 和@RequestParam,但我的控制器没有从AJAX 调用中获取数据请求。我的其他方法也有同样的方法。只有 DELETE 请求不起作用,我得到空值。我已经提到了这个Ajax delete method in spring boot,但它对我不起作用。

//AJAX DELETE
var id = {"id":$("#deleteUserIdInput").val()};

$("#deleteUserModal").modal("hide");

$.ajax({
    url : "http://localhost:3000/delete-user",
    datatype : "json",
    method : "DELETE",
    data : id,
    contentType : "application/json",
    error:function(data){
        console.log(data.entity);
    }
}).done(function(data) {
        console.log(data.entity)
    }
);

//Controller
//http://localhost:3000/delete-user
@RequestMapping(value="/delete-user", method = RequestMethod.DELETE)
@ResponseBody
public Integer deleteUser(@QueryParam("id") Integer id){
    return id;
}

我在传递给请求之前测试数据,它不为空。我希望返回传递给请求的数据,例如 1,但我得到了未定义。

【问题讨论】:

    标签: java ajax spring-boot spring-boot-maven-plugin


    【解决方案1】:

    看起来您将 id 作为请求的正文发送。这意味着您需要让您的 deleteUser 方法接收正文作为参数。

    我建议你做的是从特定 URL 中删除,即http://localhost:3000/users/{id}

    对应的方法声明变为:

    @DeleteMapping("/users/{id}")
    @ResponseBody
    public Integer deleteUser(@PathVariable("id") Integer id){
        return id;
    }
    

    你的 JS 需要修改(我认为 - 我不擅长 JS)到类似的东西(再次 - 我不是 JS 人,如果这很糟糕,对不起!):

    $.ajax({
        url : "http://localhost:3000/users/" + $("#deleteUserIdInput").val(),
        datatype : "json",
        method : "DELETE",
        contentType : "application/json",
        error:function(data){
            console.log(data.entity);
        }
    }).done(function(data) {
            console.log(data.entity)
        }
    );
    

    【讨论】:

    • 成功了。我在其他注释之前先尝试了@PathVariable,但它不起作用,但现在它起作用了,我不知道为什么 XD。感谢您的帮助!
    • @Renzchler 当您使用@QueryParam("id") 时,您需要通过将?key=value 附加到URL 来将键和值作为URL 参数而不是正文传递。所以,你原来的 ajax 请求应该是这样的:"http://localhost:3000/delete-users?id=" + $("#deleteUserIdInput").val()
    【解决方案2】:

    我认为,你无法获得价值,可能是服务器。 你能配置cors吗?

    第一个请求可以获取删除请求的值,实际上删除请求是cors虚拟请求,ajax确认你的服务器没问题,ajax可以继续发送agin。

    您可以更改post requset,并在服务器更改post 以接收您的requset。

    【讨论】:

    • 是的,兄弟,我已经正确设置了我的 CORS 配置,唯一不起作用的方法是 DELETE,但它现在可以使用 XD。感谢您的帮助!
    • 我看到你粘贴javascript,服务器获取值未定义,可能是你的脚本发送值未定义,不是服务器问题。
    • 您可以更改脚本发布请求,服务器请求接收方法主体@parthPathVariable 和,脚本数据主体json{“you PathVariable value”:“value”}。
    猜你喜欢
    • 2018-11-24
    • 1970-01-01
    • 2013-05-08
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2017-11-14
    相关资源
    最近更新 更多