SpringMVC接受List的几种方式

╰半夏微凉° 2023-10-02 15:15 77阅读 0赞

说到SpringMVC接受List参数,可能有人会说这个是个坑!下面我来跟大家说怎么补这个坑。下面我分几种情况来讲:

一、只接收一个List

1、form表单提交

controller代码:

  1. @ResponseBody
  2. @RequestMapping("test")
  3. public void test(@RequestParam(value="list",required = false) List<Integer> list) {
  4. for (Integer integer : list) {
  5. System.out.println(integer);
  6. }
  7. }

postman:

img

2、提交json对象

controller代码:

  1. @ResponseBody
  2. @RequestMapping("test")
  3. public void test(@RequestBody List<Integer> list) {
  4. for (Integer integer : list) {
  5. System.out.println(integer);
  6. }
  7. }

postman:

请求头设置:Content-Type application/json

img

img

总结一下:

controller 的区别在接收参数注解不一样,form表单提交是@RequestParam,接收json对象是@RequestBody

二、同时接收List和String,Interger等其他参数

1、form表单提交

controller代码:

  1. @ResponseBody
  2. @RequestMapping("test")
  3. public void test(
  4. @RequestParam(value="list",required = false) List<Integer> list,
  5. @RequestParam(value="test",required = false) String test) {
  6. for (Integer integer : list) {
  7. System.out.println(integer);
  8. }
  9. System.out.println(test);
  10. }

postman:

img

2、接收json对象

controller代码:

  1. @ResponseBody
  2. @RequestMapping("test")
  3. public void test(
  4. @RequestBody TestList testList) {
  5. for (Integer integer : testList.getList()) {
  6. System.out.println(integer);
  7. }
  8. System.out.println(testList.getTest());
  9. }

TestList 是自己写的接收对象:

  1. public class TestList {
  2. private List<Integer> list;
  3. private String test;
  4. public List<Integer> getList() {
  5. return list;
  6. }
  7. public void setList(List<Integer> list) {
  8. this.list = list;
  9. }
  10. public String getTest() {
  11. return test;
  12. }
  13. public void setTest(String test) {
  14. this.test = test;
  15. }
  16. }

postman:

请求Headers和之前一样

img

三、同时接收List、Map、String/Interger参数

controller代码:

  1. @ResponseBody
  2. @RequestMapping("test")
  3. public void test(
  4. @RequestBody TestList testList) {
  5. for (Integer integer : testList.getList()) {
  6. System.out.println(integer);
  7. }
  8. System.out.println(testList.getTest());
  9. System.out.println(testList.getMap());
  10. }

pojo对象:

  1. public class TestList {
  2. private List<Integer> list;
  3. private String test;
  4. private Map<String, String> map;
  5. public Map<String, String> getMap() {
  6. return map;
  7. }
  8. public void setMap(Map<String, String> map) {
  9. this.map = map;
  10. }
  11. public List<Integer> getList() {
  12. return list;
  13. }
  14. public void setList(List<Integer> list) {
  15. this.list = list;
  16. }
  17. public String getTest() {
  18. return test;
  19. }
  20. public void setTest(String test) {
  21. this.test = test;
  22. }
  23. }

postman:

img

接收成功!

img

注:POJO的传递和Map是一样的,把“map”改成你的对象名称,“ggg”这些换成对象的成员名称就可以了

四、接收List

controller:

  1. @ResponseBody
  2. @RequestMapping("test")
  3. public void test(
  4. @RequestBody List<PojoList> list) {
  5. for (PojoList pojoList : list) {
  6. System.out.println(pojoList.getTest1());
  7. System.out.println(pojoList.getTest2());
  8. }
  9. }

pojo:

  1. public class PojoList {
  2. private String test1;
  3. private Integer test2;
  4. public String getTest1() {
  5. return test1;
  6. }
  7. public void setTest1(String test1) {
  8. this.test1 = test1;
  9. }
  10. public Integer getTest2() {
  11. return test2;
  12. }
  13. public void setTest2(Integer test2) {
  14. this.test2 = test2;
  15. }
  16. }

postman:

img

总结一下:如果是单个List或者List带一些其他简单参数,form表单提交和Json对象提交都差不多,但是如果是比较复杂的数据,组合,个人建议建一个pojo去组合这些参数,然后再去接收。希望能帮到大家,如果有哪里不正确,希望指正,谢谢!!!

发表评论

表情:
评论列表 (有 0 条评论,77人围观)

还没有评论,来说两句吧...

相关阅读