[英]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
});
}
问题是myId
和myOtherParameter
参数没有被那个"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.