首页 > 解决方案 > 如何创建一个接受嵌套api作为请求的rest api

问题描述

我正在弹簧靴和球衣中创建一个休息 api。我需要传递一个嵌套的 JSON 结构作为请求。我不知道该怎么做。

嵌套结构如下,

    {
"student": "",
"groupId": "a1",
"standard": "Fifth",
"isPassed": true,
"section": "A",
"data": {
    "name": "Abcd",
    "age": "11"
},
"additional": {
    "Personal": {
        "1": {
            "address": {
                "Home": [
                    "xys"
                ],
                "Permanent": [
                    "xyz"
                ],
                "Language": [
                    "English",
                    "French"
                ]
            },
            "street": "5",
            "Mother": null,
            "Father": null
        }
    }
    "state": "xyz",
    "Sibblings": true
}

}

我期待其余的电话接受这种结构。

标签: jsonspringrestapispring-boot

解决方案


您可以尝试这样的事情,首先创建请求 dto,它将 json 映射到 DTO

import java.util.List;


public class RequestDTO {
  private String student;
  private String groupId;
  private String standard;
  private Boolean isPassed;
  private String section;
  private UserData data;
  private Additional additional;


  public String getStudent() {
    return student;
  }

  public void setStudent(String student) {
    this.student = student;
  }

  public String getGroupId() {
    return groupId;
  }

  public void setGroupId(String groupId) {
    this.groupId = groupId;
  }

  public String getStandard() {
    return standard;
  }

  public void setStandard(String standard) {
    this.standard = standard;
  }

  public Boolean getPassed() {
    return isPassed;
  }

  public void setPassed(Boolean passed) {
    isPassed = passed;
  }

  public String getSection() {
    return section;
  }

  public void setSection(String section) {
    this.section = section;
  }

  public UserData getData() {
    return data;
  }

  public void setData(UserData data) {
    this.data = data;
  }

  public Additional getAdditional() {
    return additional;
  }

  public void setAdditional(Additional additional) {
    this.additional = additional;
  }
}

class UserData {
  private String name;
  private Integer age;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}
class Additional{

  private Personal personal;
  private String state;
  private Boolean Sibblings;

  public Personal getPersonal() {
    return personal;
  }

  public void setPersonal(Personal personal) {
    this.personal = personal;
  }
}

class Personal{

  private Address address;

  public Address getAddress() {
    return address;
  }

  public void setAddress(Address address) {
    this.address = address;
  }
}

class Address{

  private List<String> Home;
  private List<String> Permanent;
  private List<Language> Language;

  public List<String> getHome() {
    return Home;
  }

  public void setHome(List<String> home) {
    Home = home;
  }
}

enum Language{
  English,French;
}

其次创建一个接受这个请求的 API 处理程序

@RestController
@RequestMapping("/api")
public class AdminController {
    @RequestMapping(value = "/test", method = RequestMethod.POST)
      public RequestDTO postData(@RequestBody RequestDTO requestDTO) {
        logger.info("Body---->", requestDTO);
        return requestDTO;
      }
}

您可以通过以下 curl 进行测试

curl -X POST \
  http://localhost:<PORT>/<context>/api/test \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: 7b66a9cf-8b69-4555-9bb2-1c186bff368d' \
  -H 'cache-control: no-cache' \
  -d '{
    "student": "",
    "groupId": "a1",
    "standard": "Fifth",
    "isPassed": true,
    "section": "A",
    "data": {
        "name": "Abcd",
        "age": "11"
    },
    "additional": {
        "Personal": {
            "address": {
                "Home": [
                    "xys"
                ],
                "Permanent": [
                    "xyz"
                ],
                "Language": [
                    "English",
                    "French"
                ]
            },
            "street": "5",
            "Mother": null,
            "Father": null
        },
        "state": "xyz",
        "Sibblings": true
    }
}'

我建议您阅读官方文档以更好地理解


推荐阅读