一、普通参数形式
基本数据类型(以int为例)
总结:
1)用基本数据类型进行参数绑定的时候,就必须传入key值,而且value值必须是声明的基本类型,如果页面提交的数据为null或者“”的话,会出现数据转换异常,因此最好使用包装类型参数
2)前端的参数名和controller的参数名保持一致时就能完成数据绑定,不一致的时候可以使用@RequestParam,比如下两图所示
包装类型参数绑定
在controller中写多个包装类型参数绑定的方法
总结:
1)包装类型绑定参数时和基本数据类型一样,传的key值要和里面绑定的参数名一致
2)包装类型绑定参数时,参数的值可以不传为null,也可以为空。
自定义对象类型参数绑定
总结:
1)只要将对象的属性名和前端的input的参数名一致即可,如果前端没有传的值,而对象里面又有这个属性,就自动赋为null
自定义复合对象类型参数绑定
总结:
1)自定义复合对象类型和自定义对象类型是一样的用法(自定义复合对象类型就是比如在OrderForm里面有基本数据类型Integer id,也有引用数据类型 Items items;)
2)自定义复合对象类型前端input的参数名要使用“属性名(对象类型的属性).属性名” 来命名,比如items.id
List参数绑定
总结:
1)前端传参通过逗号隔开
Map参数绑定
总结:
1)需要使用@RequestParam注解
@RequestParam注解解析
@RequestParam注解的作用有参数限制、设置参数默认值、自定义参数名称
1)参数限制(可用required=false关闭)
那么到底什么是参数限制呢?
required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)
2)设置参数默认值
defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置)
3)自定义参数名称
总结:
1)@RequestParam注解设置参数限制、设置参数默认值、设置更改参数名称,可根据不同场景使用
2)@ReqeustParam可以多个使用
数组类型参数绑定
1)基本数组类型接收参数
总结:
1)直接用数组类型接收即可
2)List类型接收参数
总结:
1)不可以缺少@RequestParam注解,否则会报错
二、POST请求:JSON模式参数绑定
由于前后端分离以及前端的多样性,通常我们使用json数据格式进行参数/数据传递,说到json格式,就得先说一下@RequestBody,这个是使用JSON模式进行参数绑定的必不可少的一环。
1、@RequestBody注解解析
1)@RequestBody注解的作用是将json格式的数据转为java对象
2)@RequestBody常用来处理application/json类型的数据
3)@RequestBody接收的是一个json格式的字符串
2、json模式直接绑定自定义对象类型
总结:
1)直接将json字符串转换成JavaBean,但是前端传的数据一定是json格式的数据
2)参数名必须和实体类定义的属性名一致才能正确的获取参数,如果不一致,则得不到前端传过来的参数,则为null
3、json模式直接绑定自定义复合对象类型
总结:
1)两个对象的参数名和实体类定义的属性名要一致
2)直接获取的方式,层级的参数名需要用.指定;@RequestBody形式参数json格式需要用嵌套的形式,但是如果写json形式的参数时,格式不正确,那么就会报400错误。
4、json模式绑定数组类型(一般用于批量操作)
controller使用@RequestBody+List接收数组(推荐)
总结:
1)@RequestBody获取List数组类型参数使用比较广泛
2)也可以将list里面的内容转化为String类型,以,分割,比如
5、json模式绑定多个对象(参数类型相同)
1)使用List<E>获取
2)使用Map<String,Object>接收
大总结:
1)PostMapping在controller里测试的时候,需要用到@RequestBody进行参数接收和绑定,而且基本是用到了json格式的数据就要用@RequestBody注解来进行参数绑定。
2)而GetMapping则没有那么多规则,在必要的时候则是通过@RequestParam进行参数限制、设置参数默认值、自定义参数名称
3)而且如果需要在网页上展示json格式的数据,则是需要在GetMapping或者PostMapping下面加上一个@ResponseBody注解来把数据转化为json格式,否则如果数据类型不匹配,则会报404错误。