0

我有一个 ArrayList,我将其转换为 String

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?谢谢你。

4

3 回答 3

3

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-17T06:35:50.670 回答
3

只要它是一个对象ArrayListString您就应该能够编写一个可以解析单个对象String以重新创建列表的小方法。的toStringanArrayList看起来像这样:

"[foo, bar, baz]"

因此,如果该 String 在变量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"

请注意,这是未经测试的代码。

此外,如果您的原始文件不是 sArrayList列表,String而是说 an ArrayList<MyDomainObject>,则此方法将不起作用。为此,您应该找到如何正确序列化/反序列化您的对象 -toString通常不是一种有效的方法。如果是这样的话,值得更新这个问题。

于 2012-04-17T06:44:12.507 回答
0

您不能直接将 aString转换为,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 );
于 2012-04-17T06:41:54.320 回答