Spring session хранит сериализованные объекты в моей базе данных.Проблема в том, что иногда мой код меняется.Иногда мои объекты меняются.Это нормально.Однако я получаю такие ошибки:
org.springframework.core.convert.ConversionFailedException: Failed to convert from type [byte[]] to type [java.lang.Object] for value '{-84, ..., 112}'; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.InvalidClassException: com.mysite.MyClass; local class incompatible: stream classdesc serialVersionUID = 1432849980928799324, local class serialVersionUID = 8454085305026634675
Я получаю эту ошибку, вызывая конечную точку Spring Boot с HttpSession в качестве аргумента, например, такую:
@GetMapping("/stuff")
public @ResponseBody MyClass getStuff(HttpSession session) {
try {
Object myObject = session.getAttribute("MyClass");
if (myObject != null && myObject instanceof MyClass) {
return (MyClass) myObject;
} else {
return null;
}
} catch (Exception e) {
logger.warn("Invalid session data", e);
return null;
}
}
Однако, посколькувыдается исключение до вызова метода, я не могу восстановиться после этой нормальной, ожидаемой ошибки.
В качестве обходного пути я вынужден удалять всю таблицу сеанса при каждом развертывании, хотя большинство объектов по-прежнему совместимы!
Для ясности, решение НЕ состоит в добавлении serialVersionUuid.Потому что объекты действительно меняются несовместимыми способами от одного развертывания к другому.Это не вопрос сериализации.Это вопрос восстановления после весенней сессии.
У меня такой вопрос: как я могу излечиться после этих проблем?