我有一个ArrayList,我将其转换为字符串,如
ArrayList str = (ArrayList) retrieveList.get(1);
...
makeCookie("userCredentialsCookie", str.toString(), httpServletResponce);
....
private void makeCookie(String name, String value, HttpServletResponse response) {
Cookie cookie = new Cookie(name, value);
cookie.setPath("/");
response.addCookie(cookie);
} //end of makeCookie()现在,当我检索Cookie值时,我得到了字符串,但我再次希望将其转换为ArrayList,如下所示
private void addCookieValueToSession(HttpSession session, Cookie cookie, String attributeName) {
if (attributeName.equalsIgnoreCase("getusercredentials")) {
String value = cookie.getValue();
ArrayList userCredntialsList = (ArrayList)value; //Need String to ArrayList
session.setAttribute(attributeName, userCredntialsList);
return;
}
String value = cookie.getValue();
session.setAttribute(attributeName, value);
} //end of addCookieValueToSession如何再次将其转换为ArrayList?谢谢。
发布于 2012-04-17 14:35:51
someList.toString()不是序列化数据的适当方式,而且会给您带来麻烦。
由于您需要将其作为字符串存储在cookie中,因此请使用JSON或XML。google-gson可能是一个很好的库:
ArrayList str = (ArrayList) retrieveList.get(1);
String content = new Gson().toJson(str);
makeCookie("userCredentialsCookie", content, httpServletResponce);
//...
ArrayList userCredntialsList = new Gson().fromJson(cookie.getValue(), ArrayList.class);发布于 2012-04-17 14:44:13
只要它是String对象的ArrayList,您就应该能够编写一个小方法,该方法可以解析单个String以重新创建列表。ArrayList的toString将如下所示:
"[foo, bar, baz]"因此,如果该字符串在变量value中,则可以执行以下操作:
String debracketed = value.replace("[", "").replace("]", ""); // now be "foo, bar, baz"
String trimmed = debracketed.replaceAll("\\s+", ""); // now is "foo,bar,baz"
ArrayList<String> list = new ArrayList<String>(Arrays.asList(trimmed.split(","))); // now have an ArrayList containing "foo", "bar" and "baz"请注意,这是未经测试的代码。
此外,如果您的原始ArrayList不是String的列表,而是一个ArrayList<MyDomainObject>,那么这种方法将不起作用。为此,您应该找到如何正确序列化/反序列化您的对象- toString通常不是一个有效的方法。如果是这样的话,更新这个问题是值得的。
发布于 2012-04-17 14:41:54
您不能直接将String转换为ArrayList,而是需要创建一个ArrayList对象来保存String值。
您需要更改以下代码的一部分:
ArrayList userCredntialsList = (ArrayList)value; //Need String to ArrayList
session.setAttribute(attributeName, userCredntialsList);至:
ArrayList<String> userCredentialsList = ( ArrayList<Strnig> ) session.getAttribute( attributeName );
if ( userCredentialsList == null ) {
userCredentialsList = new ArrayList<String>( 10 );
session.setAttribute(attributeName, userCredentialsList);
}
userCredentialsList.add( value );https://stackoverflow.com/questions/10186220
复制相似问题