簡體   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