powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / А вы spring mvc DTO делаете implements Serializable?
24 сообщений из 24, страница 1 из 1
А вы spring mvc DTO делаете implements Serializable?
    #39698769
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня на работе попросили сделать так, чтобы мои спринг mvc DTO имплементили Serializable, да ещё и чтобы SerialVersionUid там был.
На мой вопрос зачем я получил ответ, что это best practice.

Объясните мне это лажа какая-то или правда есть какое-то разумное объяснение этому.
У нас очень cтандартная трёхзвенка. DTO используем для того, чтобы собрать что-то в базе, переложить в DTO и по http отправить на FE. И чтобы принять с FE
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698771
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не объяснил чем именно это тебя не устраивает.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698772
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Меня просят сделать DTO Serializable и добавить serialVersionUid. Я не понимаю зачем. Нет желания писать лишний код, который никому не нужен.

Хочу узнать есть ли на самом деле причины.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698775
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerBlazkowicz,

Меня просят сделать DTO Serializable и добавить serialVersionUid. Я не понимаю зачем. Нет желания писать лишний код, который никому не нужен.

Хочу узнать есть ли на самом деле причины.

https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html

Это требование интерфейса по определению


авторThe serialization runtime associates with each serializable class a version number, called a serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization. If the receiver has loaded a class for the object that has a different serialVersionUID than that of the corresponding sender's class, then deserialization will result in an InvalidClassException. A serializable class can declare its own serialVersionUID explicitly by declaring a field named "serialVersionUID" that must be static, final, and of type long:

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698779
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DTO нужен для передачи. Правильно? Для передачи его приходится сериализовать. Верно? Верно. Для сериализации нужно пометить интерфейсом. Логично? Логично. А версия нужна когда вы вдруг будете менять класс, а старая версия будет где-нибудь сериализована и сохранена. Возможно в очереди, возможно в БД, возможно ещё где.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698785
cossack5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно юзать scala, там всего лишь нужно добавить аннотацию @SerialVersionUID к классу.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698824
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Если не любитель оверхеда и пересылка DTO --> JSON --js
То кто мешает выйти на ошибку и показать её тут.
Или работает без интерфейса?
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698860
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123questioner,
Если не любитель оверхеда и пересылка DTO --> JSON --js
То кто мешает выйти на ошибку и показать её тут.
Или работает без интерфейса?

Работает без интерфейса

jackson никакого отношения к Serializable не имеет

Serializable это java сериализация
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698869
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerРаботает без интерфейса

Где-то работает, где-то нет.

questionerjackson никакого отношения к Serializable не имеет
Serializable это java сериализация
Во-первых это слегко заблуждение. Во-вторых никогда не знаешь когда вдруг понадобится сериализовать.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698877
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторBlazkowiczquestionerРаботает без интерфейса

Где-то работает, где-то нет.

А давайте поподробнее?

questionerjackson никакого отношения к Serializable не имеет
Serializable это java сериализация
Во-первых это слегко заблуждение. Во-вторых никогда не знаешь когда вдруг понадобится сериализовать.
Почему бы не дождаться когда понадобится и тогда сделать Serializable?
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698892
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerавторпропущено...


А давайте поподробнее?

пропущено...

Во-первых это слегко заблуждение. Во-вторых никогда не знаешь когда вдруг понадобится сериализовать.
Почему бы не дождаться когда понадобится и тогда сделать Serializable?

в runtime на production ?
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698900
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingв runtime на production ?а там другой юз кейс при тестах?
Я к тому что всё таки надо знать где упадет. А не ....где то может упасть...
Мое имхо, что это нужно для толстых клиентов. Но могу ошибаться.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698907
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
llemingquestionerпропущено...

Почему бы не дождаться когда понадобится и тогда сделать Serializable?

в runtime на production ?

Ммм.... вас просят добавлять фичи в рантайм на продакшн минуя все остальные фазы?
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698922
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerllemingпропущено...


в runtime на production ?

Ммм.... вас просят добавлять фичи в рантайм на продакшн минуя все остальные фазы?

тогда что значит термин подождать ? Тесты это в идеале и не всегда все покрывают. Идеальные тесты это тесты на продакшн они кейсы в абсолюте покрывают.

Вот спецификация сервлетов тоже предполагает что объекты в session должны быть serializable чтобы сессию можно было размазать по кластеру или восстановить после рестарта. Механизм реализации возложен на application server и в зависимости от реализации если эти объекты не seriazable то можно удивиться что один war на разных серверах время от времени ведет себя странно.

Где-то работает, где-то нет.


Обновили сервер перестало работать.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698924
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerПочему бы не дождаться когда понадобится и тогда сделать Serializable?
Ну, в теории, может быть уже поздно, так как выполучите DTO несовместимых версий и не будете готовы к этому.
На практике, конечно же, это нужно далеко не всегда. И аккуратное внедрение только совместимых изменений в персистентные классы - тоже решение для небольшой команды.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698958
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczquestionerПочему бы не дождаться когда понадобится и тогда сделать Serializable?
Ну, в теории, может быть уже поздно, так как выполучите DTO несовместимых версий и не будете готовы к этому.
На практике, конечно же, это нужно далеко не всегда. И аккуратное внедрение только совместимых изменений в персистентные классы - тоже решение для небольшой команды.

Мы можем получить ДТО несовместимых версий если мы эти ДТО где-то сохраняем в виде байтов через java сериализацию ?
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39698964
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerМы можем получить ДТО несовместимых версий если мы эти ДТО где-то сохраняем в виде байтов через java сериализацию ?
Даже если вы их сохраняете не через Java сериализацию, вы можете получить несовместимые версии. :)
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39699002
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Версия вам самим удобна. Чтобы диагностировать проблемы.
Например, клиент js Ослик или по REST android пол года не запускался и вы поменяли метод в классе.
Тогда при райзе проверить версию или на входе парсера проверять.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39699004
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner...cтандартная трёхзвенка....Serializable....
AFAIK
Кластерный софт использует Serializable что бы объекты между машинами в кластере перетаскивать, если одна из машин сломается.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39699031
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА версия нужна когда вы вдруг будете менять класс, а старая версия будет где-нибудь сериализована и сохранена. Возможно в очереди, возможно в БД, возможно ещё где.Там на самом деле с Serializable все довольно печально, указание serialVersionUID спасает только от того, что без него изменения в методах приводят к java.io.InvalidClassException, а с ним методы можно менять спокойно. А вот при изменении полей нужно следить за тем чтобы serialVersionUID тоже менялся, чтобы как раз ловить java.io.InvalidClassException, а не получать на выходе какую-то фигню - в случае DTO польза довольно сомнительная: методов там и так нет, кроме геттеров и сеттеров, поэтому, исходя из конвенции, там всегда будет java.io.InvalidClassException с одной лишь разницей: по serialVersionUID можно в СКВ поискать и узнать почему нестыковка.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39699080
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Ну дак оно везде так для версионости.
Что в ОРМ, что руками добавлю поле версия="1.2.5"
Будет исключение и далее хотим разбираемся, хотим на экран.
А в DTO смену типа данных, новый тип или пропал старый разве не ловит?
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39699102
Фотография Пылинка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevquestioner...cтандартная трёхзвенка....Serializable....
AFAIK
Кластерный софт использует Serializable что бы объекты между машинами в кластере перетаскивать, если одна из машин сломается.
А мне мой (в свое время) вновь обретенный рук. проекта на это (ПРО СЕРИАЛИЗАЦИЮ, ТАМ ТОЖЕ ПО СПЕЦИФИКАЦИИ ТРЕБУЕТСЯ. ) сказал что у нас не будет миграции по нодам, вся сессия только на одной ноде. А вот про возможность пассивации бинов (ADF) при высокой нагрузке он даже не подозревал. И такую ситуацию (пассивации) смоделировать в тестах просто невозможно, нужно специальное нагрузочное тестирование.
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39699114
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПылинкаLeonid Kudryavtsevпропущено...

AFAIK
Кластерный софт использует Serializable что бы объекты между машинами в кластере перетаскивать, если одна из машин сломается.
А мне мой (в свое время) вновь обретенный рук. проекта на это (ПРО СЕРИАЛИЗАЦИЮ, ТАМ ТОЖЕ ПО СПЕЦИФИКАЦИИ ТРЕБУЕТСЯ. ) сказал что у нас не будет миграции по нодам, вся сессия только на одной ноде. А вот про возможность пассивации бинов (ADF) при высокой нагрузке он даже не подозревал. И такую ситуацию (пассивации) смоделировать в тестах просто невозможно, нужно специальное нагрузочное тестирование.

Я думаю я не один такой, кто до этого ни о какой пассивации не слышал. Может конечно есть более привычный англоязычный аналог
...
Рейтинг: 0 / 0
А вы spring mvc DTO делаете implements Serializable?
    #39699530
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по большому счету суид нужен только если ты сериализуешь чонить родным джавасериализатором. ну да вдруг ты класс переименуешь и оно у тебя назад десериализовываться уже не захочет. или там поле добавишь или еще что. а подставишь тот же суид вроде оно заработать должно )) наверное. если полей не добавил.
вообще это старьё какое то.

дтохи которые отдаешь клиенту через хттп и контроллер ты навряд ли будешь когда-либо сериализовывать и хранить.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / А вы spring mvc DTO делаете implements Serializable?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]