jquery - 使用 Ajax 的 PUT 请求(处理 Spring)

标签 jquery ajax spring rest spring-mvc

我想使用 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/

相关文章:

javascript - onClick() -> Loading/onSuccess -> addClass 或 removeClass (JS)

javascript - Highcharts - 使一个点可点击?

javascript - 使用 jquery 的 AJAX 的外部 scripts.js 在 HTMLInputElement.onkeyup 处返回 Uncaught ReferenceError

javascript - 当 Flash 层放置在元素上时保持 CSS 动画

javascript - onClick 显示 iframe 5000 然后隐藏

javascript - "old"手机不显示复选框复选标记,当通过 javascript 选中时

javascript - 如何使用 Javascript 保护机器人/爬虫的表单

java - 什么是加载时编织?

java - 如何使用 spring mongo data api 更新嵌入式 mongo 文档

java - 如何在 HTTP 请求中发送对象