json
1.颜老师,在前后端分离的项目中,后端如何接收前端发来的json数据?我记得是@RequestBody,但有时候会报错。
答:当使用SpringMVC接收json数据时,需要区分json的数据格式,具体如下:
(1)若前端发送的是Json对象,那么后端需要用@RequestParam注解;
(2)若前端发送的是Json字符串,那么后端需要用@RequestBody注解;(通常,在前台的ajax中,可以使用 JSON.stringify(json对象) ,将json对象转为json字符串)
但要注意的是:以上虽然是普遍性结论,但在个别框架中的确存在bug。我曾在课堂遇到一个情况,有学生前端使用微信小程序,并通过JSON.stringify(this.data.userAnswers)向后端发数据(Json字符串),但后端的SpringMVC必须用
@PostMapping("commitExams")
public Result commitExams(@RequestParam Map<String,String> userAnswers){...}
才能接收到数据,否则报500错误。显然,这和我上面的结论是相悖的。因此想告诉大家的是,在应用层面的一些结论,不要记得太死。这其中可能是开发者代码哪个细节有问题,也可能是某个框架自己的bug。
深克隆和浅克隆
2.深克隆和浅克隆的区别是什么?
答:因为java、js等编程语言均支持这两种克隆,就不针对某一个语言来解释了。
深克隆和浅克隆,也成为深拷贝和浅拷贝。
(1)当拷贝的对象只包含了 基本类型的属性时,深克隆和浅克隆没啥区别,都是将对象复制了一份。
(2)当拷贝的对象包含了 引用类型 的属性时:对于引用类型的属性,浅克隆复制的是属性的引用地址。即,拷贝前和拷贝后的两个引用属性,会指向同一个内存地址;而深克隆是将引用属性的值也拷贝了一份,即,拷贝前和拷贝后的两个引用属性各自独立。
- 完 -
推荐阅读