Post方法如何接受数组

痛点

在日常工作过程中 ,经常需要使用post方法去接受前端传来的数组.但由于一直没有系统性的梳理,导致总是遇到这样那样的问题,耽误时间.现在就把一些常用的场景记录下来,后续有新的发现,也在这个页面记下来.

一、application/json 的情况

使用json格式接收数据需要使用统一的注解Requestbody

1.直接由数组接收

 @PostMapping ("/test")
    public String demo(@RequestBody List<Integer> ids)  {
        log.info("{}",ids);
        return JSONObject.toJSONString(ids);
    }

传参截图

2.对象接收的情况

与上述情况不同的是,这种情况接受,数组需要是对象的一个属性,此时传参,不能像上述那样简单,需要一个完成的json结构.

    @PostMapping ("/test")
    public String demo(@RequestBody Student student)  {
        log.info("{}",student);
        return JSONObject.toJSONString(student);
    }
	
	public class Student {
    	private List<Integer> ids;
    	private String name;
	}


参数

{"ids":[1,2,3,4,5],"name":"aka"}

二、表单传值

表单传值算是比较复杂,我也有很多不了解的

数组接受

    @PostMapping ("/test")
    public String demo(@RequestParam List<Integer> ids)  {
        log.info("{}",ids);
        return JSONObject.toJSONString(ids);
    }

传参截图

这种方式仅限于逗号分隔的字符串,能自动转成数组

对象接收

    @PostMapping ("/test")
    public String demo(Student student)  {
        log.info("{}",student);
        return JSONObject.toJSONString(student);
    }

传参截图

如果需要传递一个对象?其中一个属性是数组怎么办?

例如 需要接受对象数组

    @PostMapping("/test2")
    public String demo2(List<Student> students) {
        log.info("{}", students);
        return JSONObject.toJSONString(students);
    }


public class Student {
    private Integer studentNo;
    private String name;

    public Student(Integer studentNo, String name) {
        this.studentNo = studentNo;
        this.name = name;
    }
}

错误结果
错误信息

解决方式:包一层

包装对象如下

public class College {
    private List<Student> students;
}

接口代码

    @PostMapping("/test3")
    public String demo3(College college) {
        log.debug("{}", college);
        return JSONObject.toJSONString(college);
    }

参数截图
此时便可以愉快的传递了

以上错误的方式应该会有解决方式,待我细细读一下源码再来补充下

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值