springboot controller参数注入方式
作者:JinF~
基本类型参数
以上为例,接收基本类型参数时,可以把 name
和 age
封装进对象,也可以不封装,执行结果是一样的。
@RequestParam
也可以不用,只要接收的参数名和传输的参数名相等即可。
get
post
请求都可。
@PostMapping("/simpleField") public String simpleField(@RequestParam("name") String name,@RequestParam("age") String age) { return name + age; }
不能使用 @RequestBody
, @RequestBody
指定参数接收 json 格式的数据,只能用封装类接收参数,错误使用的示例如下
@PostMapping("/t") public String t(@RequestBody String a,String b) { return a + b; }
接收对象类型参数
1.不使用 @RequestBody
前端传输参数格式如 postman 所示,只需要参数名称能够对应即可,如果属性是对象,则使用.对象属性名
来指明属性,如果属性是数组或者集合,则需要加上[下标]
来指定下标。
get
post
请求都行。
@Data public class Album { private Integer musicCount; private String[] musics; private List<Person> musicians; private Person[] people; }
@RestController @RequestMapping("/test") public class TestController { @Resource private ObjectMapper json; @PostMapping("/test") public String test(Album album) throws JsonProcessingException { return json.writeValueAsString(album); } }
2.使用 @RequestBody
@RequestBody
指定参数将接收json数据格式,需要把请求头的 Content-Type
设置为 application/json
,按照上面的例子,前端传输的数据格式如下
@RestController @RequestMapping("/test") public class TestController { @Resource private ObjectMapper json; @PostMapping("/test") public String test(@RequestBody Album album) throws JsonProcessingException { return json.writeValueAsString(album); } }
接收对象类型数组时需要在数组参数前使用 @RequestBody
,@RequestBody
的作用是接收 json 格式的数据封装成对象。
不使用 @RequestBody
的话会报没有默认构造函数的异常。
接收基本类型数组
接收基本类型数组的方式和接收基本类型一样,只要接收的参数名和传输的参数名相等即可。
get
post
请求都行。
以下为例,有些前端传输的数组参数格式是 ?strs[]=strs1&strs[]=strs2
,这种情况下可以在方法参数前使用 @RequestParam("strs[]")
来接收参数
@RestController @RequestMapping("/test") public class TestController { @Resource private ObjectMapper json; @PostMapping("/array") public String array(String[] strs,Integer[] ints) throws JsonProcessingException { return json.writeValueAsString(strs)+" "+json.writeValueAsString(ints); } }
接收基本类型集合
如果直接使用基本类型集合接收数据,则必须使用 @RequestBody
,不使用 @RequestBody
的话必须把集合封装进类,如本文 接收对象类型参数 所示,使用 @RequestBody
的示例如下
@PostMapping("/array") public String test(@RequestBody List<String> names) throws JsonProcessingException { return json.writeValueAsString(names); }
接收对象类型数组和集合
接收对象类型数组和集合时如果不封装进实体类,则必须使用 @RequestBody
,封装进实体类的方式见本文
接收对象类型参数
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- SpringBoot如何实现调用controller和Service层方法
- springboot中的controller参数映射问题小结
- springboot中Controller内文件上传到本地及阿里云操作方法
- springboot如何通过controller层实现页面切换
- springboot Controller直接返回String类型带来的乱码问题及解决
- SpringBoot之controller参数校验详解
- springboot中@RestController注解实现
- SpringBoot通过注解监测Controller接口的代码示例
- SpringBoot中@RestControllerAdvice @ExceptionHandler异常统一处理类失效原因分析
- SpringBoot和MybatisPlus实现通用Controller示例