SpringBoot后端接收数组对象的实现

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

SpringBoot后端接收数组对象的实现

右耳朵猫   2022-11-22 我要评论

SpringBoot后端接收数组对象

前端代码

var Params = {
  type: "typeA",
  title: "titleA",
  authors: [{name:"upxuan", age:"18"}, {name:"susen", age:"18"}]
}
console.log(Params)
this.$ajax({
  url: '/api/manualAdd',
  method: 'post',
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  data: Params
}).then( res => {
  console.log(res)
})

后端代码

@RequestMapping("/manualAdd")
@ResponseBody
public String AddManualJpaper (@RequestBody RequestManualAddData data) {
    System.out.println("User:" + data.getType() + "," + data.getTitle());
    System.out.println("Authors:" + data.getAuthors().get(0).getName() + "," + data.getAuthors().get(0).getAge());
    return "Get it";
}

接收的数据对象类

private String type;
private String title;
private List<AuthorsModel> authors;
 
public String getType() {
    return type;
}
 
public void setType(String type) {
    this.type = type;
}
 
public String getTitle() {
    return title;
}
 
public void setTitle(String title) {
    this.title = title;
}
public List<AuthorsModel> getAuthors() {
    return authors;
}
 
public void setAuthors(List<AuthorsModel> authors) {
    this.authors = authors;
}

model

private String name;
private int age;
public String getName() {
    return name;
}
 
public void setName(String name) {
    this.name = name;
}
public int getAge() {
    return age;
}
 
public void setAge(int age) {
    this.age = age;
}

后端List接收数组报400或收不到参数值

遇到一个关于前端传数组到后端时因为无法接收参数报400或者接收不到参数值的问题:

在springboot项目中经常会用 @RequestBody 或者 @RequestParam在接口中接收参数,我们都知道:

  • @RequestBody 用于接收json格式的对象数据,像自定义User实体类对象,Map,List等
  • @RequestParam 用于接收单个的属性

像上面的用对象或者单个属性去接收前端传来的参数,还是能很愉快的接收的,但是有一种类型的就比较容易让人极度不适了,那就是数组和集合类型的参数

 这里我说一个集合类型的参数,数组大致一样:

 如上图接收一个List集合,不管是用 @RequestBody还是用 @RequestParam接收都没有成功,不是报400就是参数值为null,然后就去百度疯狂的逛了几条芥,

还是没有找到一个有效的办法,最后索性自己研究,终于把问题给解决了。

说下我的解决方法

首相从postman工具我们可以看到json有两种格式一种是 { }  还有一种是 [ ] ,{}传对象,[]传数组,这个和前端的传参方式是对应的,所以前端在传参数到后端时

就不能用{}而要用[]否则就会报400的错误,如下

var params = ["aaaa", "bbbb", "ccccc"];

属性名可以自定义不影响后端接收,后端用 @RequestBody和 @RequestParam都能接收,至此问题就解决了,希望对大家有所帮助,如果那个地方有不对的也欢迎大家留言纠正!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们