Для записи, так как у меня была похожая проблема:
У меня было сообщение " java.io.InvalidClassException: com.example.stuff.FooBar; com.example.stuff.FooBar; нет действительного конструктора "
Я думал, что это потому, что в нем отсутствовал конструктор по умолчанию. Но приведенные выше ответы подтверждают, что это не обязательно (но наше приложение использует старый сериализатор, для которого действительно требуется конструктор по умолчанию, поэтому случай может возникнуть).
Потом я нашел страницу, на которой было написано:
Если класс, предназначенный для наследования, не сериализуем, он
может быть невозможно написать сериализуемый подкласс. В частности, это
будет невозможно, если суперкласс не обеспечивает доступный
конструктор без параметров.
Отсюда и сообщение, которое я получил, наверное. Оказалось, что основная проблема была классической: я объявил класс сериализуемым, а суперкласс - нет! Я переместил интерфейс Serializable вверх в иерархии, и все было хорошо.
Но сообщение было немного вводящим в заблуждение ...: -)