JSON输出序列

时间:2017-04-27 03:54:04

标签: java json google-app-engine java-ee jersey

我希望使用POST从Web服务获取JSON输出。当我在localhost上尝试该程序时,它可以正常工作,因为输出符合我的要求,但是当我上传到Google App Engine时,我尝试获取输出并且序列是反向的。

{
  "Data": {
    "token": "****"
  },
  "AppData": {
    "status": "success",
    "message": [
      ""
    ]
  }
}

GAE的输出

{
    "AppData": {
        "status": "success",
        "message": [
        ""
        ]
    },
    "Data": {
        "token": "****"
    }
}

预期产出

public Response getSAppData(int id, String email, String password){
    Map<String, AppData> AppDataHM = new HashMap<>(); 
    Map<String, Data> DataHM1 = new HashMap<>();
    Map<String, List<String>> DataHM2 = new HashMap<>();
    HashMap<Object, Object> ADHMDHM = new HashMap<>();

    List<String> message = new ArrayList<>();
    Data data = DataHM.get(new AppDataRequest (id, email, password));
    List<String> data2 = new ArrayList<>();

    if(data != null){
        message.add("");
        AppDataHM.put("AppData", new AppData("success", message));
        DataHM1.put("Data", data);
        ADHMDHM.putAll(AppDataHM);
        ADHMDHM.putAll(DataHM1);
        String ADHMDHM1 = new Gson().toJson(ADHMDHM);
        return Response.status(200).entity(ADHMDHM1).build();
    }
    else{
        message.add("Your login information is invalid. Please try with the correct information");
        AppDataHM.put("AppData", new AppData("error", message));
        DataHM2.put("Data", data2);
        ADHMDHM.putAll(AppDataHM);
        ADHMDHM.putAll(DataHM2);
        String ADHMDHM2 = new Gson().toJson(ADHMDHM);
        return Response.status(200).entity(ADHMDHM2).build();
    }   
}

生成输出的代码。

提前感谢每个有助于指出错误的用户。

1 个答案:

答案 0 :(得分:4)

为了保持输出顺序,您应该使用LinkedHashMap。因为HashMap不维护键或值的排序。但LinkedHashMap会保留广告订单。

尝试将代码更改为LinkedHashMap,然后它应该有效。