json - 如何创建一个接受嵌套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
}
}
我期待其余的电话接受这种结构。
解决方案
您可以尝试这样的事情,首先创建请求 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
}
}'
我建议您阅读官方文档以更好地理解
推荐阅读
- azure - terraform 中现有存储帐户的密钥保管库访问策略
- micronaut - 如何在 Micronaut 的集合中获取带注释的类?
- c# - 用户控制 WPF C#
- javascript - 使用Javascript根据类之间的数字计算值
- python - 用 pandas 计算状态持续时间
- c# - OpenApi 生成器 - 从配置文件传递映射
- firebase - firebase - 限制用户登录 14 天
- r - 结构方程建模
- vuejs3 - 如何在不手动刷新页面的情况下使用 vue 3 composition api 观看和检索 param 的 id 查询数据
- javascript - Puppeter 在当前页面或 iFrame 中查找元素