将查询字符串参数解析为java对象

时间:2012-11-08 02:51:19

标签: java parsing query-string querystringparameter

我有这样的查询字符串:

ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife&Content=racroi&TimeStamp=2012-11-05T17:20:06.056

我有Java对象:

LogObject{
    private String ObjectGUId;
    private String ObjectType;
    private String ObjectTitle;
    private String Content;
    private String TimeStamp;
}

所以我想将这个查询字符串解析为这个java对象。

我已经搜索并阅读了很多问题,但还没有得到正确答案。

告诉我什么可以解决这个问题。

3 个答案:

答案 0 :(得分:3)

如果你真的不需要将查询字符串推送到你自己的类中(你可能想要那个),而不是手动解析它,你可以使用URLDecoder,正如@Sonrobby评论的那样:

String qString = "ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife";
Uri uri = Uri.parse(URLDecoder.decode("http://dummy/?" + qString, "UTF-8"));
if (uri != null) {
    for(String key: uri.getQueryParameterNames()) {
        System.out.println("key=[" + key + "], value=[" + uri.getQueryParameter(key) + "]");
    }
}            

“虚拟”看起来很脏,但如果您只有查询字符串值(qString)则需要它。如果您有完整的URL,只需将其直接传递给URLDecoder,即可完成。

答案 1 :(得分:2)

礼仪

  1. 你真的应该更加具体地了解你所尝试的内容以及它为什么不起作用。

  2. LogObject的正确代码示例在这里非常有帮助。

  3. 理想情况下,您会提供SSCCE,以便其他人可以轻松自行测试您的问题。

  4. 答案

    您可以像这样提取名称:值对:

    String toParse = "ObjectGUId=1abcde&ObjectType=2&ObjectTitle=maximumoflife&Content=racroi&TimeStamp=2012-11-05T17:20:06.056";
    String[] fields = toParse.split("&");
    String[] kv;
    
    HashMap<String, String> things = new HashMap<String, String>();
    
    
    for (int i = 0; i < fields.length; ++i)
    {
        t = fields[i].split("=");
        if (2 == kv.length)
        {
            things.put(kv[0], kv[1]); 
        }
    }
    

    我已选择将它们放入HashMap中,但您可以轻松查看名称部分(kv[0])并选择对其执行某些操作。例如:

    if kv[0].equals("ObjectGUId")
    {
        logObject.setGUId(kv[1]); // example mutator/setter method
    }
    else if //...
    

    但是,LogObject中的所有字段都是私密的,您没有向我们展示任何方法,所以我希望您有一些方法可以从外部设置它们...请记住,您需要存储如果你打算用所有字段初始化HashMap而不是在构造函数调用之后设置字段,那么在某种数据结构中配对(就像我用LogObject所做的那样)。

    说到SSCCE,I made one for this answer

答案 2 :(得分:0)

受@ bruno.braga的启发,这是使用Apache http组件的一种方式。您利用所有解析极端情况:

List<NameValuePair> params = 
    URLEncodedUtils.parse("http://example.com/?" + queryString, Charset.forName("UTF-8"));

这将为您提供一个易于使用的NameValuePair对象列表。