【问题标题】:How to create an rest api which accepts nested api as request如何创建一个接受嵌套api作为请求的rest api
【发布时间】:2020-01-23 03:10:08
【问题描述】:

我在 spring boot 和 jersey 中创建了一个 rest 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
}

}

我期待其余的调用接受这个结构。

【问题讨论】:

  • 请提出一种方法来做到这一点。期待知道这一点的人能更快地做出反应。
  • 根据它创建实体或模态,并根据需要给出关系
  • 可以,但是怎么给关系呢?和型号?和实体?

标签: json spring rest api spring-boot


【解决方案1】:

您可以尝试这样的事情,首先创建请求 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
    }
}'

我建议你通过官方docs 更好地理解

【讨论】:

  • 如何在数据库@Pulkit中设计这种结构
  • @alexander 你需要创建表来存储学生数据、地址和其他东西。你看过spring hibernate教程吗??
【解决方案2】:
class Data
{
    private String name;
    private Integer age;
}

class Student{

private String student;
private String groupId;
private String standard;
private Boolean isPassed;
private String section;
private Data data;
private Additional additional;
}

这里有一些东西可以开始。进一步的嵌套必须以类似的方式完成

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-25
    • 2022-01-23
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多