在使用前后端分离开发的过程中遇到的一些问题
问题:
1、SpringBoot接收数组参数
- SpringBoot+vue进行开发,需要前端传递数组作为参数,后端接收进行处理,使用了多种方法,后端一直不能接收到参数,最后发现使用了注解**@RequestBody**就能接收到前端传递的参数
@PutMapping("/batchDel")
public ApiResult batchDelete(@RequestBody long[] ids) {
return ApiResult.success(resourcesService.removeByIds(Arrays.asList(ids)));
}
前端只需要传递数组参数即可
batchDelete() {
batchDelete(this.selectedRowKeys).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
},
2、Java数组转List
- 通过 Arrays.asList(strArray) 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。
String[] strArray = new String[2];
List list = Arrays.asList(strArray);
使用场景:Arrays.asList(strArray)方式仅能用在将数组转换为List后,不需要增删其中的值,仅作为数据源读取使用。
- 数组转为List后,支持增删改查的方式
通过ArrayList的构造器,将Arrays.asList(strArray)的返回值由java.util.Arrays.ArrayList转为java.util.ArrayList
String[] strArray = new String[2];
ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ;
- 通过集合工具类Collections.addAll()方法
通过Collections.addAll(arrayList, strArray)方式转换,根据数组的长度创建一个长度相同的List,然后通过Collections.addAll()方法,将数组中的元素转为二进制,然后添加到List中,这是最高效的方法。
ArrayList< String> arrayList = new ArrayList<String>(strArray.length);
Collections.addAll(arrayList, strArray);
使用场景: 需要在将数组转换为List后,对List进行增删改查操作,在List的数据量巨大的情况下,优先使用,可以提高操作速度。
- JDK版本在1.8以上,可以使用流stream来将下列3种数组快速转为List,
- 分别是int[]、long[]、double[]
List<Integer> intList= Arrays.stream(new int[] { 1, 2, 3, }).boxed().collect(Collectors.toList());
List<Long> longList= Arrays.stream(new long[] { 1, 2, 3 }).boxed().collect(Collectors.toList());
List<Double> doubleList= Arrays.stream(new double[] { 1, 2, 3 }).boxed().collect(Collectors.toList());
如果是String数组,stream流可以这样操作
String[] arrays = {"tom", "jack", "kate"};
List<String> stringList= Stream.of(arrays).collect(Collectors.toList());
3、文件上传抛出异常
【Current request is not a multipart request】
原因是因为没有设置前端的提交方式的content-type的值为multipart/form-data
或者去掉content-type的设置即可