SpringMVC接收Ajax通过PUT、POST、GET、DELETE传递的参数

一、问题描述

1.今天在进行SSM+RESTful整合的时候,发现通过AJAX发送的POST和GET请求能正常接收,但是无法通过PUT和DELETE传递参数,网上说在web.xml中加入一个监听器,但是这个只能解决PUT传递问题,没有办法解决DELETE问题

2.经过仔细研究之后,找到了一套解决办法,下面把解决办法分享给大家,如果遇到问题请留言~

3.GitHub项目地址(分支-01_SSM增删改查):https://github.com/1432516744/88_Spring_SpringMVC_MyBatis.git

二、SpringMVC接收Ajax的四大请求传递参数

2.1 Controller

1.在Controller类的方法中,通过在参数前加上 @RequestBody 注解,将接收的json串放到对象属性中

2.2 发送请求

1.GET请求,GET请求通常用来获取数据而不是传递数据,所以数据直接传递即可

2.在POST、DELETE、PUT中,如果在控制器参数前指定了 @RequestBody 注解,则不能直接通过 data:{"key": value}的形式传递,系统无法解析该类型的参数

3.对于上述问题我们需要通过以下步骤传递参数

将需要传递的参数单独写成一个json串存储到一个变量中-用不用引号括起来都可以

var jsonStr = {"id":2, "name": "POST","age": 20};

var jsonStr = '{"id":2, "name": "POST","age": 20}';

需要指定传递的数据类型:contentType: "application/json"

很重要!如果不指定这个控制器的 @RequestBody 注解将无法解析传递的json参数

需要将参数转为JSON数据:data: JSON.stringify(jsonStr)

将我们提取出来的数据转换为json数据进行传送

2.3 传递PUT参数示例

1.传递put参数,post、delete一样的使用方式

2.完整截图

Controller

四大请求

2.4 源代码

1.Controller

package com.codecoord.controller;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import com.codecoord.dao.PersonMapper;

import com.codecoord.entity.Person;

@RestController

public class PersonController {

// 因为在Spring配置文件中已指定mapper扫描位置,可以自动注入

@Autowired

private PersonMapper personMapper;

/**

* 查询所有数据-返回JSON

*/

@RequestMapping(value="/persons",method=RequestMethod.GET)

public Object persons() {

return personMapper.findAll();

}

/**

* 批量删除数据

*/

@RequestMapping(value="/person", method=RequestMethod.DELETE)

public Object deleteMore(@RequestBody Person person) {

// personMapper.delete(id)

System.out.println("delete: " + person);

return 1;

}

/**

* 添加数据 @RequestBody

*/

@RequestMapping(value="/person", method=RequestMethod.POST)

public Object insert(@RequestBody Person person) {

// personMapper.insert(person)

System.out.println("insert: " + person);

return 3;

}

/**

* 修改数据 @RequestBody

*/

@RequestMapping(value="/person", method=RequestMethod.PUT)

public Object update(@RequestBody Person person) {

System.out.println("update: " + person);

return 4;

}

}

2.四大请求

<%@ page language="java" contentType="text/html; charset=utf-8"

pageEncoding="utf-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>index</title>

<!-- 加载jQuery -->

<script src="js/jquery-3.3.1.min.js"></script>

</head>

<body>

<button id="sendGet">发起GET请求</button>

<button id="sendPost">发起POST请求</button>

<button id="sendPut">发起PUT请求</button>

<button id="sendDelete">发起DELETE请求</button>

<script type="text/javascript">

/* GET请求 */

$("#sendGet").click(function(){

// 需要传递的参数

$.ajax({

type: "get",// 请求类型

url: "persons",// URL地址

success: function(datas) {// 访问成功

alert(datas);

},

error: function() {// 请求错误

alert("请求失败!");

},

dataType: "json"// 返回值类型

});

});

/* POST请求 */

$("#sendPost").click(function(){

// 需要传递的参数

var jsonStr = {"id":2, "name": "POST","age": 20};

$.ajax({

type: "post",// 请求类型

url: "person",// URL地址

success: function(datas) {// 成功访问

alert(datas);

},

error: function() {// 请求错误

alert("请求失败!");

},

contentType: "application/json",// 传递的数据类型

data: JSON.stringify(jsonStr)// 将参数转为JSON

});

});

/* PUT请求 */

$("#sendPut").click(function(){

// 需要传递的参数

var jsonStr = '{"id":2, "name": "Put","age": 20}';

$.ajax({

type: "put",// 请求类型

url: "person",// URL地址

success: function(datas) {// 成功访问

alert(datas);

},

error: function() {// 请求错误

alert("请求失败!");

},

contentType: "application/json",// 传递的数据类型

data: JSON.stringify(jsonStr)// 将参数转为JSON

});

});

/* DELETE请求 */

$("#sendDelete").click(function(){

// 需要传递的参数

var jsonStr = {"id": 2, "name": "Delete","age": 20};

$.ajax({

type: "delete",// 请求类型

url: "person",// URL地址

success: function(datas) {// 成功访问

alert(datas);

},

error: function() {// 请求错误

alert("请求失败!");

},

contentType: "application/json",// 传递的数据类型

data: JSON.stringify(jsonStr)// 将参数转为JSON

});

});

</script>

</body>

</html>

---------------------

作者:情醉梦中魂

原文:https://blog.csdn.net/sinat_34104446/article/details/83991045

SpringMVC接收Ajax通过PUT、POST、GET、DELETE传递的参数

相关推荐