在动态信封中包装 json 响应 - Rest api

Posted

技术标签:

【中文标题】在动态信封中包装 json 响应 - Rest api【英文标题】:Wrapping json response in dynamic envelop - Rest api 【发布时间】:2020-12-07 05:48:43 【问题描述】:

我有一个带有一个 Rest API 的简单 spring-boot 应用程序。我想通过使用客户端休息 Web 服务来发送学生数据(JSON 格式)。 但我想用“DATA”封装这个学生信息,这应该是动态的,如下所示。

if(dynamic == true)
    // envelop the student information in "DATA" and send student info to client.
else 
   // Do not envelop student data and send student info to client.

学生当前的 JSON 格式。


   "id": "1-abcd",
   "name": "stack",
   "address": "Pune"

预期的 json 格式。


   "data": 
         "id": "1-abcd",
         "name": "stack",
         "address": "Pune"
     

学生班级如下:

Class Student
 String id;
 String name;
 String address;

【问题讨论】:

【参考方案1】:

如果学生对象是动态的,则将学生对象包装在地图中,否则返回学生对象

public ResponseEntity<?> getStudent(...)
    ...
    if(dynamic)
       return ResponseEntity.status(HttpStatus.OK)
                            .body(Collections.singletonMap("data", studentObj));
     else 
       return ResponseEntity.status(HttpStatus.OK).body(studentObj);
    

【讨论】:

【参考方案2】:

您可以有一个 Envelope 类,例如:

public class Envelope 

    Student data;

    public Student getData() 
        return data;
    

    public void setData(Student data) 
        this.data = data;
    

    public Envelope(Student data) 
        super();
        this.data = data;
    

还有你在if-else中的逻辑:

  // using Jackson library: import com.fasterxml.jackson.databind.ObjectMapper;
  ObjectMapper mapper = new ObjectMapper();
  Student student = new Student("1-abcd", "stack", "Pune");

  if (dynamic) 
      Envelope envelope = new Envelope(s);
      return mapper.writeValueAsString(envelope)
  

  return mapper.writeValueAsString(student)

输出 包装


    "data": 
        "id": "1-abcd",
        "name": "stack",
        "address": "pune"
    

展开


    "id": "1-abcd",
    "name": "stack",
    "address": "pune"

【讨论】:

以上是关于在动态信封中包装 json 响应 - Rest api的主要内容,如果未能解决你的问题,请参考以下文章

动态规划——Russian Doll Envelopes

#yyds干货盘点# 动态规划专题:信封嵌套

使用 REST Api,如何在我的类型化请求模型中包含“任何类型的 json”?

通过 DocuSign Rest API 创建 DocuSign 信封时出错(包含多个文档和多个收件人)

伯努利错装信封问题

在 REST API 中取消转义 json 响应