[英]Parse a query string parameter to java object
我有這樣的查詢字符串:
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對象。
我已經搜索並閱讀了許多問題,但尚未獲得正確的答案。
告訴我什么可以解決這個問題。
如果您確實不需要將查詢字符串放入自己的類中(盡管您可能希望這樣做),則可以使用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,就可以完成。
您確實應該更加詳細地說明您嘗試過的內容以及為什么它不起作用。
正確的LogObject
代碼示例在這里確實很有幫助。
理想情況下,您應該提供一個SSCCE,以便其他人可以輕松地測試您自己的問題。
您可以像這樣提取name:value對:
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
中的所有字段都是私有的,並且您沒有向我們展示任何方法,因此,我希望您可以從外部設置它們的方式...請記住,您需要將這些對存儲在某些數據結構中如果您打算LogObject
具有所有字段的LogObject
而不是在構造函數調用之后設置字段,則使用這種方法(就像我對HashMap
所做的那樣)。
說到SSCCE, 我為此做了一個答案 。
受@ bruno.braga的啟發,這是使用Apache http-components的一種方法。 您可以利用所有解析極端情況:
List<NameValuePair> params =
URLEncodedUtils.parse("http://example.com/?" + queryString, Charset.forName("UTF-8"));
這將為您提供易於使用的NameValuePair對象列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.