繁体   English   中英

从 SpringBoot 应用程序的服务发送到前端应用程序时如何保持 JSON 的顺序?

How to keep the JSON's order preserved while sending to frontend application from SpringBoot Application's service?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在开发一个springboot应用程序。

我有一个 class 具有以下字段

class MyClass
{
  String s1;
  String s2;
  String s3;
  String s4;

  //getters setters constructors
}

我正在调用 API ,后者又调用服务。

public String myService()
{
    JSONArray arr1 = new JSONArray();
    for (Items item : itemsList) 
    {
      JSONObject itemObj = new JSONObject();
      itemObj.put("s1","Value1");
      itemObj.put("s2","Value2");
      itemObj.put("s3","Value3")
      itemObj.put("s4","Value4");

      arr1.put(itemObj);
    }

    JSONObject out = new JSONObject();
    out.put("total_Items", arr1);
    return out.toString();  // this is org.json.JSONObject
}

这样,当在前端 angular 应用程序上单击按钮时,我可以获得 excel 和重新排序的成员作为列。

我想要的是在导出到 excel 工作表时保留列中成员的顺序。

s1|s2|s3|s4 //按照上面的例子

我还有许多其他服务,它们返回不同类型的对象(除了这里提到的 MyClass),所以我想从后端本身按定义的顺序(根据类中成员的顺序)返回元素。

我知道 JSON 不允许我们保留订单,因为它在内部使用 HASHMAP。

有没有办法返回 JSON 响应,以便顺序与 class 成员的顺序相同?

我还尝试通过以下方式使用 GSON。

public String myService()
{
  MyClass itemsArray[] = new MyClass[itemsList.size()];
  int i=0;
  for (Items item : itemsList) 
  {
    MyClass itemObj = new MyClass();
    itemObj.setS1("Value1");
    itemObj.setS2("Value2");
    itemObj.setS3("Value3")
    itemObj.setS4("Value4");

    itemsArray[i]=itemObj;
  }
  Gson gson = new Gson();
  return gson.toJson(itemsArray);  // this is java.lang.String
}

在这种情况下,我能够以有序的方式获得 API 响应(在 POSTMAN 上),但在前端 angular 应用程序上导出时,它会在下载屏幕上冻结。

我尝试随机转换为 JSONObject 和其他东西,但无法使代码正常工作。

无论如何,问题可以在后端解决......还是只需要在前端完成一些事情?

提前致谢。

1 个回复

这可以通过使用 @JsonPropertyOrder 注释的 Jackson 库来完成。

您可以定义元素的顺序,如下所示 class @JsonPropertyOrder({ "s3", "s2", "s1", "s4"})

请参阅下面的工作示例

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.istack.NotNull;
import java.io.IOException;
import java.util.UUID;

@JsonPropertyOrder({ "id", "password", "name", "email", "enabled" })
public class UserResource {
    private UUID id;
    @NotNull
    private String name;
    @NotNull
    private String email;
    private boolean enabled;
    private String password;

    public UserResource(UUID id, String name, String email, boolean enabled, String password) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.enabled = enabled;
        this.password = password;
    }

    public UUID getId() {
        return id;
    }

    public void setId(UUID id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public static void main(String args[]){
        ObjectMapper mapper = new ObjectMapper();
        try {
            UserResource student = new UserResource(UUID.randomUUID(), "sheel", "sheel@c4c.com",true, "$$$$$$%%##^^$DSGHHH");
            String jsonString = mapper
                    .writerWithDefaultPrettyPrinter()
                    .writeValueAsString(student);
            System.out.println(jsonString);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

和 output 如下所示

{
  "id" : "fbfcd21d-731e-4acb-9fec-90a499e47cc9",
  "password" : "$$$$$$%%##^^$DSGHHH",
  "name" : "sheel",
  "email" : "sheel@c4c.com",
  "enabled" : true
}
2 如何使用AWS S3从Rails-API上传图像到前端通过JSON对象响应应用程序?

我正在创建一个以API模式运行rails的博客应用程序。 我需要将博客文章图像放置到前端,并在标准img html-tag中显示它们。 我正在使用活动存储将图像从rails-API上传到AWS s3。 我的临时解决方案是运行生命周期方法“ before_save”,该方法具有以下代码: ...

4 将URL从AppEngine发送到Java应用程序

我正在将Java应用程序与Google AppEngine一起使用。 我将发布请求发送到servlet,它需要使用一些未知数量的URL进行响应。 我想知道什么是实现此目标的最佳方法。 在应用程序中创建URL对象并将其作为JSON发送,或者在Java应用程序中将其重新转换,或者仅使用一些 ...

7 从 SpringBoot 应用程序上传到私有 S3 存储桶

只允许特定 Web 应用程序访问存储桶的好方法是什么? 我需要应用程序能够通过 url 访问它们,但我不希望任何不使用它的人能够使用存储桶对象 url 在浏览器中查看它。 我尝试了一个不同的存储桶策略,它只允许某些 ip,但我无法正确格式化它。 目前在“阻止公共访问(存储桶设置)”部分中没有阻止 ...

10 如何在 ec2 实例中使用来自应用程序前端的日志流并将日志直接发送到 cloudwatch/s3 存储桶?

我在 AWS 中部署了一个应用程序作为 ec2 实例。 此应用程序是 angular 应用程序。 现在我想记录用户交互和错误,然后在 cloudwatch 中显示这些日志并从 cloudwatch 导出到 s3。 问题是我需要以某种方式将日志直接从应用程序的前端推送到 cloudwatch,甚至更 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM