我正在开发一个springboot应用程序。
我有一个包含以下字段的类
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|第二节|第三节|s4//按照上例
我还有许多其他的服务,它们返回不同类型的对象(除了这里提到的MyClass),所以我想从后端本身以定义的顺序(按照类中成员的顺序)返回元素。
我知道JSON不允许我们保留顺序,因为它在内部使用HASHMAP。
有没有办法返回JSON响应,使其顺序与类成员的顺序保持一致?
我也尝试过以下面的方式使用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条答案
按热度按时间toiithl61#
如果您想使用DataStructure,请使用下面给出的LinkedHashMap。它将按插入顺序进行序列化。
第一个
如果要按排序顺序序列化,请使用TreeMap,它将按排序键序列化
第一个
这可以通过使用@JsonPropertyOrder注解的Jackson库来完成。
您可以定义元素的顺序,如下所示:class @JsonPropertyOrder({“s3”,“s2”,“s1”,“s4”})
请参考以下工作示例
和输出,如下所示