169 похожих чатов

А эти контроллеры для одного клинта (фронта)? Получается что NPE

из одного контроллера не равно NPE из другого? В чем разница?

8 ответов

18 просмотров

Ну например, апи, где запршивают инфу о пользователе. При этом там много всего проверяется, что-то изменяется, что-то делается. В итоге там может быть NPE, может быть еще какой-то эксепшн. Сейчас в контроллере на самом верху в catch все ловится и возвращается в ответ json со специальной структурой именно для такого запроса + текст ошибки эксепшена. В другом контроллере, для другого апи, также на самом верху все перехватывается, но уже другой json в ответ нужен. Т.е. в первом может быть Exception() но нужен в ответ один json. Во втором тоже Exception() но в ответ нужен уже другой json.

Artem-Mezhelovsky Автор вопроса
Fff
Ну например, апи, где запршивают инфу о пользовате...

Так как у тебя в зависимости от исключения меняется ответ, то я предполашаю что и на фронте какие-то финтифлюшки меняются, а это уже бизнес логика, поэтому такие трайкечи нужно писать в сервисном слое - там же формировать нужный json. Далее во всех приложениях есть стандартные ошибки типа 404 - тут ну не может быть ничего кастомнго - вот для таких случаев есть общий ContollerAdvice

Artem Mezhelovsky
Так как у тебя в зависимости от исключения меняетс...

Ну не совсем от исключения меняется ответ, скорее в разных контроллерах просто разные ответы если есть какой-то эксепшн. Ну и бизнес-логике вроде как не надо знать ничего о том, что у нее спрашивают и откуда. Там просто что-то делается и в итоге либо нормальный ответ, либо исключение. При том, почти все можно привести к одному общему хендлеру, только вот нужна доп инфа, чтобы условия воткнуть. Типа если апи такой, то еще вот это сделаем и можно возвращать ответ. Но в эксепшене из бизнес-логики понятно нет никакой инфы о том какой апи это был

Artem-Mezhelovsky Автор вопроса
Fff
Ну не совсем от исключения меняется ответ, скорее ...

ну хорошо не бизнес логика а логика которая билдит ответ ввиде json (слой представления). Мне это видится так: бизнес слой сделал какие то манипуляции и кинул в слой представления инфу (ошибку, или нормальные значение не важно) эту всю инфу слой представления интерпретирует и формирет json для контроллера Любые другие перестановки на уровне контроллера на мой взгляд бесплоезны, тупо код перенесешь из одного класса в другой

Artem Mezhelovsky
ну хорошо не бизнес логика а логика которая билдит...

А сейчас никакого слоя представления и нету. В контроллере try-catch на ошибки из бизне-логики и там же формируется json для ответа. Ну и в итоге, выглядит так, что можно было бы сделать ControllerAdvice и и единый хэндлер и перехватывать все Exception там, а не в контроллере. Это убрало бы дублирование кода, т.к. в большинстве своем все эти ответы почти одинаковые. Но именно, что почти. Т.е. в хендлере эксепшена надо все равно знать в каком апи он вылетел. Да, туда в общий хэндлер можно передать HttpServletRequest, можно там попытаться распарсить его и вытащить инфу о том, какой это был апи. Либо, можно также как сейчас в контроллере ловить эксепшн и кидать уже свой кастомный со всем нужным для обработки в общем хэндлере. Я хотел просто узнать насколько это хреновая практика и вообще стоит ли так делать или лучше оставить как есть

Artem-Mezhelovsky Автор вопроса
Fff
А сейчас никакого слоя представления и нету. В ко...

Ну либо создать слой представления)

Artem-Mezhelovsky Автор вопроса
Алексей
а если так сделать? https://stackoverflow.com/a/47...

Ну если твоей команде ок с AOP то можно наверное, но мне кажется это все костыли

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта