
Ivan
01.03.2017
11:55:33
В каком месте оно обычное? Я сам юзаю этот механизм для вытаскивания JPA модели и это очень хреново работает

Митко Соловец?
01.03.2017
11:56:05
ты напрямую JPA кидаешь на шаблон?

Ivan
01.03.2017
11:57:17
нет ты не понял о чем в видосе речь, в метод initCreationForm там попадает объект Owner который перед этим вытаскивается из БД с помощью метода findOwner, вот про это я говорил
а по поводу шаблона я сейчас юзаю DTO везде иначе можно словить миллион всякой херни от JPA/Hibernate

Google

Митко Соловец?
01.03.2017
12:00:12
ага, понял тебя

Sergey
01.03.2017
12:03:39

Ivan
01.03.2017
12:04:20
да и че, там же все нормально описано в чем их минусы

Sergey
01.03.2017
12:04:24

Ivan
01.03.2017
12:04:28
есть
я уверен ты даже не в курсе
что там может стрельнуть
да и вообще мало кто в курсе как там @ModelAttribute работает внутри

Sergey
01.03.2017
12:05:06
не в курсе чего? того как они процессятся?

Ivan
01.03.2017
12:05:18
да, когда отрабатывает @ModelAttribute?
например
до входа в метод обработки запроса или после
?

Google

Ivan
01.03.2017
12:06:32
после выхода из метода я имею ввиду

Sergey
01.03.2017
12:07:53
конкретно его не юзаю, но неужели этого нет в доках или сложно посмотреть в исходниках?
ну вообще и на вход и на выход он вроде как работает. в зависимости от того куда воткнул его

Ivan
01.03.2017
12:09:07
а ты сорцы спринга читал?

Sergey
01.03.2017
12:09:11
если на метод - тогда на выход

Ivan
01.03.2017
12:09:20
а если я на метод класса повесил его
просто на левый

Sergey
01.03.2017
12:09:45
те что мне нужны были - да, читал

Ivan
01.03.2017
12:10:23
ну это не самое простое дело разобраться что они там делают, потому что кода куча, прочитав его один раз через месяц все забываешь что там написано
и по поводу @ModelAttribute он отрабатывает и на входе и на выходе все верно, и вот в этом видео на входе в метод Owner вытаскивается из репозитория
бинлится на параметр метода

Sergey
01.03.2017
12:11:16
просто на левый
его разве что-то обработает? он же только в контексте контроллера работает

Ivan
01.03.2017
12:11:25
конечно работает
если ты вешаешь @ModelAttribute на метод в классе то он всегда отрабатывает на входе и выходе из обработчиков запросов
большиство людей думают что @ModelAttribute просто кладет данные в модель шаблонизатора
но фактически он еще дохрена всего умеет делать
что в доках плохо описано

Sergey
01.03.2017
12:13:58
30 секунд потребовалось чтобы найти https://github.com/spring-projects/spring-framework/blob/1ee0626c94e6862fc21c99257e53433ee7ce4d36/spring-web/src/main/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessor.java
я со спрингом мало работаю, а то с чем я работаю знаю довольно хорошо в плане исходников и особенностей работы. так что я думаю для тех кто работает каждый день со спрингом на протяжении 10 лет нет никаких проблем с этим
если б не было в джаве аннотаций знаешь что было б?

Google

Sergey
01.03.2017
12:15:59
писали б в docblock их и разбирали рефлекшенами, как это сейчас делается на пхп
и это куда неудобнее чем нативные аннотации

Oleksandr
01.03.2017
12:16:32
а не проще явно обернуть в функцию?
собсно как и сделано в питоне с аннтотациями

Sergey
01.03.2017
12:17:02
что именно?
можно и мапу просто вернуть, чтобы очевидно было)

Oleksandr
01.03.2017
12:18:32
@f def g(): ... == def g(): ... ; g = f(g)

Ivan
01.03.2017
12:18:40

Oleksandr
01.03.2017
12:20:02

Ivan
01.03.2017
12:21:43
нет, бывают простые аннотации сорцы которых даже читать не стоит потому что и так ясно что они делают, но в Spring другой случай, там аннотации ради аннотаций а не ради удобства
@ModelAttribute которые по идее должен биндить данные в модель шаблона на самом деле умеет еще и биндить параметры в метод
@RequestMapping который нельзя оверрайднуть или расширить в наследнике

Ivan
01.03.2017
12:23:11
3 разных аннотации для инжекта
2 аннотации для транзакций

Sergey
01.03.2017
12:23:59
ты еще вспомни аннотации для DI в 2х вариантах

Ivan
01.03.2017
12:24:05
в 3х
@Autowired, @Inject, @Resource
@Repository,@Component,@Service

Alexander
01.03.2017
12:24:52

James Tiberius Kirk ?
01.03.2017
12:26:35

Google

Sergey
01.03.2017
12:26:46

Ivan
01.03.2017
12:26:58
@RestController
кстати те что ты перечислил вполне нормальные
к ним нет претензий

Sergey
01.03.2017
12:27:40
а искать из идеи че делает эта аннотация вообще без проблем
потыкал везде брейкпоинты, посмотрел и все. как по мне нет ничего сложного
другое дело если б там магические методы были, которые непонятно где и как процессятся
через eval

Admin
ERROR: S client not available

Sergey
01.03.2017
12:28:38
или какие-то подключаемые скрипты

Ivan
01.03.2017
12:29:22
ок, почему нельзя @RequestMapping переопределить в классе наследнике?

Anton
01.03.2017
12:35:31
а можно подробнее, а то интересно, а вопрос я ваш не понял)

Sergey
01.03.2017
12:36:01
вообще нельзя переопределить?

Ivan
01.03.2017
12:38:52
есть интерфейс в определенными методами, например put/get/post/delete я вешаю на каждый из них @RequestMapping с URL "/put", "/get" и т.д. называю интерфейс Crud и делаю несколько наследников, например AccountCrud, TableCrud и т.д., в них я вешаю одну аннотацию @RequestMapping уровня класса с каким нибудь префиксом, например @RequestMapping("/accounts"), и вуаля у меня 4 URL /accounts/put, /accounts/get и т.д.
вообще нельзя переопределить?
можно создать базовый класс но не вешать аннотации @RequestMapping, затем унаследоваться от класса и там уже на нужные методы повесить аннотации @RequestMapping

Sergey
01.03.2017
12:40:08
а если переопределить метод, но не трогать аннотации?

Ivan
01.03.2017
12:40:41
тогда просто будет URL который был объявлен в базовом классе, т.е. просто /get
без /accounts вначале

Sergey
01.03.2017
12:41:16
а что по этому поводу разрабы спринга говорят?

Ivan
01.03.2017
12:41:33
говорят пока не будем делать

Google

Ivan
01.03.2017
12:42:00
когда то я находил баг у них открытый уже несколько лет но сейчас искать в лом
может ошибаюсь
на стековерфлоу есть вопросы от людей
есть даже либа которую пилили чтобы решить косвенно эту проблему
вроде
https://github.com/resthub/springmvc-router
сделать маппинг URL в стиле djano

Anton
01.03.2017
12:43:26
а свою анотацию запилить, которая будет добавлять этот префикс)
и на наследника вешать ее

Ivan
01.03.2017
12:44:52
этот код придется поддерживать, плюс придут новые разрабы которые будут вникать, мы выбрали путь не указывать @RequestMapping в базовом классе, а указывать в наследниках, немного больше кода получается но суть таже

Anton
01.03.2017
12:47:03
нашел у нас такое, сделано так же)

Sergey
01.03.2017
12:53:51
у него и с маппингом получше

Ivan
01.03.2017
12:55:21
ну в новых проектах я пытаюсь не юзать Spring(ну кроме нормальных по моему мнению либ типо Spring Security или IOC или AOP)
или Spring JDBc

Sergey
01.03.2017
12:55:42
IoC/AOP/Data самое годное
+ бут

V
01.03.2017
12:55:49
многозначительно

Sergey
01.03.2017
12:56:03
а для апи можно и jersey взять

Ivan
01.03.2017
12:56:09
Data не, бут хз, его юзаем есть плюсы есть минусы, для быстрого старта ок, потом нужно допиливать
проперти там повыставлять, где то их авто конфигурации отключить

Sergey
01.03.2017
12:56:48
в буте только напрягает что нужно отключать модули вручную которые не нужны

Ivan
01.03.2017
12:56:59
согласен