Ответ 1
Создайте свой собственный класс SerializableCookie
, который implements Serializable
и просто скопируйте свойства Cookie
во время его создания. Что-то вроде этого:
public class SerializableCookie implements Serializable {
private String name;
private String path;
private String domain;
// ...
public SerializableCookie(Cookie cookie) {
this.name = cookie.getName();
this.path = cookie.getPath();
this.domain = cookie.getDomain();
// ...
}
public String getName() {
return name;
}
// ...
}
Убедитесь, что все свойства также сериализуемы. Помимо примитивов, класс String
, например, сам уже implements Serializable
, поэтому вам не о чем беспокоиться.
В качестве альтернативы вы можете также обернуть/украсить Cookie
как свойство transient
(чтобы он не сериализовался) и переопределить методы writeObject()
и readObject()
соответственно. Что-то вроде:
public class SerializableCookie implements Serializable {
private transient Cookie cookie;
public SerializableCookie(Cookie cookie) {
this.cookie = cookie;
}
public Cookie getCookie() {
return cookie;
}
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
oos.writeObject(cookie.getName());
oos.writeObject(cookie.getPath());
oos.writeObject(cookie.getDomain());
// ...
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
cookie = new Cookie();
cookie.setName((String) ois.readObject());
cookie.setPath((String) ois.readObject());
cookie.setDomain((String) ois.readObject());
// ...
}
}
Наконец, используйте этот класс вместо List
.