繁体   English   中英

为什么在我的 API 调用中正确设置时,我会收到“方法参数类型 Long 的必需请求参数 <> 不存在”?

[英]Why am I getting a "Required request parameter <> for method parameter type Long is not present" when it is being correctly set in my API call?

我遇到了一个与此线程中描述的问题非常相似的问题

但是,那里提出的解决方案都没有帮助,因此我将不胜感激这里任何人可以提供的任何帮助。

我有一个网页应该使用 Ajax.Data 调用(在此处描述)从 Spring 引导 Rest 端点获取数据。

我的Spring开机Rest API如下

@PostMapping(value = "/ajax/my-ajax-api")
public MyResponseDto runThisMethod(@RequestParam Long myId, @RequestParam Integer myOtherParameter) {
///
}

通过以下 Javascript 代码调用 API

if ($("#myDetailsDataTable").length) {
    var myDataTable = $("#myDetailsDataTable").DataTable({
        "order": [[ 0, 'asc' ]],
        "stateSave": true,
        "stateDuration": -1,
        "autoWidth": false,
        "ajax": {
            url: "/ajax/my-ajax-api",
            type: "POST",
            dataSrc: "myResponseItem",
            data: function ( d ) {
                d.myId = $('#myId').val();
                console.log(d.myId)
                d.myOtherParameter = $('#myOtherParameter').val();
                console.log(d.myOtherParameter)
            }
        },
        "columns": [
        //Do a bunch of stuff with the column data here
        ]
    });

    setInterval( function () {
        myDataTable.ajax.reload(null, false);
    }, 3000 );

    myDataTable.on( 'xhr', function () {
        let ajaxResponseJson = myDataTable.ajax.json();
        //Do a bunch of stuff with the JSON
    });
}

问题是myIdmyOtherParameter参数没有被那个"ajax"命令分配/填充,由于某种原因我无法确定。 console.log语句已经证明它们在调用时肯定被填充在 Javascript 中,所以我不知道为什么它们被排除在 API 调用之外。

这是错误响应:

error: "Required request parameter 'myId' for method parameter type Long is not present"
path: ""
status: 400

此代码适用于其他用户。 我已尝试清除浏览器缓存并拨打电话。 我也尝试过使用其他浏览器。 但是每次都会发生相同的 400 错误。 我只能猜测这与我的特定环境配置有关。 但我不知道它可能是什么。 我正在使用 Java 17、IntelliJ IDEA 2022.2.1 和最新的 Chrome。

我找到了一个可行的解决方案,即使我无法确定问题的根源。

问题是 Ajax POST 请求。 似乎在某些机器上,请求参数将作为请求正文的一部分提交,这导致 Rest 端点响应错误请求错误。

解决方案是将命令更改为 GET 请求并将端点更改为GetMapping

"ajax": {
            url: "/ajax/my-ajax-api",
            type: "GET",
            dataSrc: "myResponseItem",
            data: function ( d ) {
                d.myId = $('#myId').val();
                d.myOtherParameter = $('#myOtherParameter').val();
            }
        }
@GetMapping(value = "/ajax/my-ajax-api")
public MyResponseDto runThisMethod(@RequestParam Long myId, @RequestParam Integer myOtherParameter) {
///
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM