前端携带List参数向后端发送请求很困难?NO

前端请求如何向后端传递List类型的数据

问题描述

在最近的项目开发中,遇到了一个前端向后端发送List类型数据的请求,各种尝试结果总是失败,特此总结下来。

后端接口

根据博客类型id集合删除博客集合

    @DeleteMapping("/ids")
    public ResponseEntity<Void> deleteBlogTypes (@RequestBody List<Long> blogTypeIds ){
        blogTypeService.deleteBlogTypes(blogTypeIds);
        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }

因为js并没有List数据类型,所以怎样发送请求是一个很头疼的问题

解法1
  1. 思路一当然是采用json将参数序列化,然后进行携带请求参数,一位get请求和delete请求的参数信息并不是放在请求体中,而是放在地址栏中拼接参数,所以这里采用post的请求比较好(地址栏的url有限制,不可过长,批量删除所需要拼接的id集合可能很多)
	//声明空的数组
	let blogTypeIds = [];
	//在数组添加数据,省略......
	//发送post请求
	$.ajax({
	     method:"post",
	     url:"/blog-type/ids",
	     dataType: "json",
	     data: JSON.stringify(blogTypeIds),  //这里需要将参数,序列化成为json数据
	     headers:{
	          'Content-Type':'application/json;charset=UTF-8',
	     },
	     success: function (data, status, xhr) {
	          //请求成功执行操作                      
	     },
	     error: function (error) {   
	     	  //请求失败后的回调方法
	          console.log(error)              
	     }
	});
                           

ps:data中的数据,必须使用data: JSON.stringify(blogTypeIds);如果使用
data: { blogTypeIds : JSON.stringify(blogTypeIds) }这样的格式则不能成功。

  1. 修改后台接口为post请求
    @PostMapping("/ids")
    public ResponseEntity<Void> deleteBlogTypes (@RequestBody List<Long> blogTypeIds ){
        blogTypeService.deleteBlogTypes(blogTypeIds);
        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }

感觉delete请求也是可以实现的,只是还没有找到好的方法,之后遇到,在进行更新。

注意事项

  1. 首先ajax要为post请求(post和delete请求的向后台传参方式不同)
  2. 参数只能是json,并且形式只能是data:JSON.stringify(list),而不能是data: { list: JSON.stringify(list) }
  3. 需要设置contentType : 'application/json',不然会报错Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported],因为默认这种类型不能被解析
  4. 数组要使用JSON.stringify(list),解析成为一个合法的json字符串(可以在请求外解析,也可以在请求内的data中直接解析)
  5. controller 加上@RequestBody。

解法2

在网上还找到了很多别的解决方式,但是很可惜我好像并没有成功,但可能也可以成功。之后有机会再进行测试

1.前台传递数组类型的参数,不需要直接解析成json字符串
	let data=[];
	//在数组添加数据,省略......
	$.ajax({
		method:"post",
        url:"/blog-type/ids",
        data: {
            blogTypeIds:data
        },
        dataType: "json",
        success: function (data) {
        }
    });
2.后台使用@RequestParam(required = false, value = “list[]”)
    @PostMapping("/ids")
    public ResponseEntity<Void> deleteBlogTypes (@RequestParam(value = "blogTypeIds[]") List<Long> blogTypeIds ){
        blogTypeService.deleteBlogTypes(blogTypeIds);
        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }

注意事项

  1. value = "blogTypeIds[],这个不能省,否则不能成功。
  2. @RequestParam(value = "blogTypeIds[]") List<Long> blogTypeIds换成@RequestParam(value = "blogTypeIds[]") Long[] blogTypeIds也是可以成功的。说明后台的List数据和数组数据都可以使用这样的方式来来实现

ps:解法二有待考证(我并没有成功),参考博客:https://blog.csdn.net/qq_27093465/article/details/52094112
解法1经过测试已经成功。

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
? 74. 您认为VR系统的社会影响如何? 75. 您认为VR系统的文化影响如在 Spring Boot 后端中,您可以使用 `@RequestBody` 注解将 POST 请求中的 JSON 数据绑定到一个 Java 对何? 76. 您认为VR系统的经济影响如何? 77. 您认为VR系统是否能够成为象上,然后在该对象中使用 List 属性来接收前端传递的数组数据。 以下是一个示例代码未来的主流? 78. 您认为未来的VR系统会有哪些新的变革? 79. 您认: ```java @RestController @RequestMapping("/api") public class MyController { @PostMapping("/processList") public void processList(@RequestBody为未来的VR系统会对人类社会产生哪些深远影响? 80. 您认为未来的 MyListRequest request) { List<String> myList = request.getList(); // 处理 myList 数组 } } public class MyListRequest { private List<String> list; // Getter and Setter } ``` 在前端中,您可以使用 JavaScript 创建VR系统会对人类文化产生哪些影响? 81. 您认为未来的VR系统会对人类一个包含数组数据的 JSON 对象,并使用 `fetch()` 函数发送 POST 请求,将该 JSON 数据作为请求发送到经济产生哪些影响? 82. 您认为未来的VR系统会对人类科技产生哪些后端。 以下是一个示例代码: ```javascript let myArray = ["item1", "item2", "item3"]; 影响? 83. 您认为未来的VR系统会对人类教育产生哪些影响? 84. 您let myData = { list: myArray }; fetch('/api/processList', { method: 'POST', headers: { 认为未来的VR系统会对人类医疗产生哪些影响? 85. 您认为未来的VR 'Content-Type': 'application/json' }, body: JSON.stringify(myData) }) .then(response => { console.log('Response系统会对人类娱乐产生哪些影响? 86. 您认为未来的VR系统会对人类艺:', response); }) .catch(error => { console.error('Error:', error); }); ``` 在上面的代码中,我们首先创建一个包含数组数据的 `myArray` 数组,然后将其添加到 JSON 对象 `myData` 中,术产生哪些影响? 87. 您认为未来的VR系统会对人类设计产生哪些影响该对象具有与后端 Java 类中的 `MyListRequest` 类相同的属性名称。然后,我们使用 `? 88. 您认为未来的VR系统会对人类社交产生哪些影响? 89. 您认为fetch()` 函数发送 POST 请求,将 `myData` 对象作为请求发送后端

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值