通过HTTP调用将更多值从一个服务器传输到另一个服务器的最佳方法?

时间:2017-03-09 20:29:24

标签: java json networking http-post

我要将数据从一台机器传输到另一台连接在网络上的机器上。可能需要转移10-20个值,这取决于。我所做的只是在json中打包/编组值,然后通过http post调用将其传输到另一台服务器(比如哪台是连接在网络上的另一台机器)。假设ServerA中ServerA到ServerB的数据流我必须打包所有数据来构建json,而在ServerB中我必须解组它,这会占用我的大部分代码,如下所示

    String student_id = json.getString("sid");
    String student_role_number = json.getString("rnumber");
    String student_name = json.getString("name");
    String isDayScholar = json.optString("dayscholar", "false"); 
    String stream = json.optString("stream", ""); 
    String class_section = json.getString("section");

当值为4-5时,如果有更多的值(例如20-25),那么它很轻,我觉得这个get / set操作非常繁重。有没有更好的方法来避免/最小化这个?

1 个答案:

答案 0 :(得分:1)

当值为4-5时,如果有更多数量的值,如20-25 ,它会亮起,如果您只是硬编码某些数据结构中的所有必需键,那么可能有帮助。例如,在您的情况下,所有必需的键都是sid,rnumber,name,dayscholar等。

为您的密钥保留一个单独的硬编码数据结构

org.json.JSONObject jsonObject = new org.json.JSONObject();
java.util.Map<String , Object> otherMap = new java.util.HashMap<>();

String[] myLovedKeys = {"sid" , "rnumber" , "name" , "dayscholar" , "stream" , "section"};
for( int x = 0; x < myLovedKeys.length; x++ )
{  
    if( myLovedKeys[x].equals("dayscholar") || myLovedKeys[x].equals("stream") )
    {
        String value = "";
        if( myLovedKeys[x].equals("dayscholar") )
        {
            value = json.optString( myLovedKeys[x] , "false" );
            jsonObject.put( myLovedKeys[x] , value );
            otherMap.put( myLovedKeys[x] , value );
        }
        else
        {
           value = json.optString( myLovedKeys[x] , "" ); // stream key-value
           jsonObject.put( myLovedKeys[x] , value );
           otherMap.put( myLovedKeys[x] , value );
        }
    }
    else
    {
        String keyValue = json.getString( myLovedKeys[x] ); 
        jsonObject.put( myLovedKeys[x] , keyValue );
        otherMap.put( myLovedKeys[x] , keyValue );
    }
}

这将允许您准确知道循环中当前正在处理哪个键,并且您可以根据您有兴趣处理的键来处理不同的行为

现在我声明JSONObject和java.util.Map的原因是因为我只想详细说明如果你缺少org.json。*库,那么你可以通过使用java轻松逃脱.util.Map,但是如果你有org.json *库,那么你也可以以更舒适的方式处理问题。现在假设我们想要访问数据然后我们可以轻松地尝试像

这样的事情
for( int x = 0; x < myLovedKeys.length; x++ )
{
    System.out.println( "java.util.Map: [" myLovedKeys[x] + "=" + otherMap.get( myLovedKeys[x] ) );
    System.out.println( "org.json.JSONObject: " + myLovedKeys[x] + "=" + jsobObject.getJSONObject( myLovedKeys[x] ) );  
}

以类似的方式,您可以修改和更新这些值

otherMap.put( myLovedKeys[0] , "SomeValue");
otherMap.put( myLovedKeys[1] , "Other Value" );
otherMap.put( "sid" , "SomeValue" );
otherMap.put( "rnumber" , "toSomeName");
//myLovedKeys[0] = "sid" , myLovedKeys[1] = "rnumber"

同样,您可以在 jsonObject 变量中反映一些更改。你要意识到的是你必须处理在代码中某处硬编码所有关键名称的痛苦,是的,这将需要一些打字:),如果仍然不足以帮助我,请告诉我你的情况