我遇到了一个问题非常类似的一个描述在这个线程
然而,那里提出的解决方案都没有帮助,所以我将感谢这里任何人能提供的任何帮助。
我有一个网页,应该使用Ajax.Data调用从Spring Boot Restendpoint获取数据(此处描述)。
我的Spring Boot RestAPI如下
@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
和my其他参数
参数没有被"ajax"
命令分配/填充,出于某种原因我无法确定。控制台. log
语句已经证明它们在调用时肯定被填充在Javascript中,所以我不知道为什么它们被排除在API调用之外。
这是错误响应:
error: "Required request parameter 'myId' for method parameter type Long is not present"
path: ""
status: 400
此代码适用于其他用户。我尝试过清除浏览器缓存并进行调用。我也尝试过使用其他浏览器。但每次都会发生相同的400错误。我只能猜测这与我的特定环境配置有关。但我不知道它可能是什么。我正在使用Java17,IntelliJ IDEA 2022.2.1和最新的Chrome。
我找到了一个有效的解决方案,即使我无法确定问题的根源。
问题是Ajax POST请求。在某些机器上,请求参数似乎将作为请求正文的一部分提交,这导致Restendpoint响应错误请求。
解决方案是将命令更改为GET请求并将endpoint更改为GetMaps
。
"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) {
///
}