【问题标题】:Wrapping json response in dynamic envelop - Rest api在动态信封中包装 json 响应 - 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;
}

【问题讨论】:

    标签: java json spring-boot rest http


    【解决方案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"
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 2019-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多