(1)@GetMapping只能通过url传参数。所对应的接口参数只能是用@RequestParam注解或者不注解

(2)@PostMapping既可以通过url传参数,也可以通过body传json参数。所对应的接口参数可以有@RequestParam注解,也可以有@RequestBody注解,也可以没有注解。

(3)不管是@GetMapping还是@PostMapping,除了@RequestBody注解对应的参数是通过json在body里面传参数外,@RequestParam注解和没有注解都是在url中传参数.

(4)用@RequestParam注解修饰的字段前端必须有对应的参数传过来,用@RequestBody修饰的类,前端至少要传一个空的json串,json串内容不一定需要和类对应,json串中只要有类的字段,后端的类就会从中取出对应的字段并赋值。

(5)对于类对象的参数,不管对于@RequestBody还是@RequestParam还是没有注解,前端不管传来多少个字段,后端的类对象只取类中包含的对象。

举个例子,比如后端有一个类User的对象:

假设未用@RequestBody修饰,只能通过url传参:

 

情况一:传的参数与类对应:

 

情况二:传的参数与类不对应:

 

 

 

假设使用@RequestBody修饰,只能通过body的json字符串传参(当然url里面也可以传值,只是不会被@RequestBody接收,只能被@RequestParam和无注解的接收):

 

情况一:传的参数与类对应:

 

情况二:传的参数与类不对应:

 

 

 

总结:不管是url传参,还是body传参,对于后端的参数来说(包括普通变量和类变量),我们可以把类变量看成是很多普通变量的集合,后端只要求前端必须传被注解的变量,未被注解的变量前端可传可不传,前端传了后端就会取,不传后端默认该变量为null。也就是说,前端传的参数不一定与类变量一一对应也是不会报错的,但最好还是一一对应。@RequestParam("easd")指定了前端必须传的参数名,而@RequestBody只指定前端必须传一个json在body里面,至于json字符串的内容,不一定与类变量一一对应,这点与get命令是相似的。
 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐