我想使用 Ajax 发送 PUT 请求。我发送带有必要信息的请求:newNavigation。
PUT 请求:
var newNavigation;
var newInputNavigation = document.getElementById('newInputNavigation');
newNavigation = newInputNavigation.value;
function editNavigation() {
var prefix = '/airline/';
$.ajax({
type: 'PUT',
url: prefix +'flights/' + idAction.replace('edit',''),
data: {
navigation: newNavigation
},
success: function(receive) {
$("#adminTable").empty();
$("#informationP").replaceWith(receive);
$("#hiddenLi").removeAttr('style');
},
error: function() {
alert('Error edited flight');
}
});
}
Controller :
private final String prefix = "/airline/";
@RequestMapping(value = prefix + "/flights/{id}", method = RequestMethod.PUT)
@ResponseBody
public String updateFlight(@PathVariable("id") String id, @RequestParam("navigation") String navigation) {
String returnText = "Flight edited successful";
String str1 = navigation;
String str2 = id;
return returnText;
}
错误:
PUT http://localhost:8080/airline/flights/11 400 ()
问题:
如何发送带有必要数据的 PUT 请求(newNavigation)?
如何在 Spring Controller 中获取数据(newNavigation)?
编辑:
添加了 NavigationDTO:
public class NavigationDTO implements Serializable{
public String navigation;
public NavigationDTO() {
super();
}
}
更改了 Controller :
@RequestMapping(value = prefix + "/flights/{id}", method = RequestMethod.PUT)
@ResponseBody
public String updateFlight(@PathVariable("id") String id, @RequestBody NavigationDTO navigation) {
String returnText = "Flight edited successful";
String str1 = navigation.navigation;
String str2 = id;
return returnText;
}
错误:
PUT http://localhost:8080/airline/flights/8 415 ()
最佳答案
@RequestParam("navigation")
RequestParam 意味着您的导航是请求 header 中的一个参数,但事实并非如此,导航位于您的有效负载中,因此您需要反序列化它。
Spring使用了Jackson,需要创建一个以导航为参数的POJO类,该类应该是可序列化的。
在您的方法中使用@RequestBody,它将解析后的有效负载存储在对象中
public String updateFlight(@PathVariable("id") String id, @RequestBody NavigationDto navigation) { //NavigationDto is the Pojo class
然后您可以轻松地从对象“navigation”访问导航属性
关于jquery - 使用 Ajax 的 PUT 请求(处理 Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44095201/