|
|
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть метод контроллера: Код: java 1. 2. 3. 4. Вместе с request-ом прилетает класс SomeClass с кучей полей внутри этого SomeClass, которые необходимо проверить. Проверить не только на не пустоту, но и с отдельными запросами к базе, например, чтобы проверить какие-то остатки и т.д. Код: java 1. 2. Так вот, такую проверку можно вынести в отдельный класс и проверять там, а можно так же выделить класс, но при этом реализовать интерфейс implements Validator. Все ошибки, которые связаны с проверками я генерирую таким образом: throw new MyException("Пользователь не найден"), далее ControllerAdvice отлавливает их и возвращает пользователю json ответ. Как видно, у меня нет никаких ModelAndView. Корректно ли в данном случае использовать org.springframework.validation.Validator? Кто как делает подобные вещи? И еще, как валидация спринговая связана с валидацией хибернейта? Правильно ли я понимаю, что спринг валидация это некая первичная проверка, а далее вторичная на уровне доменного класса? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2016, 22:04 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
JulT, Можно еще в SomeClass навесить аннотации валидации на поля... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 07:25 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. а в контроллере это: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 08:23 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
lor2 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. а в контроллере это: Код: java 1. 2. 3. 4. 5. спасибо, с этим проблем нет, мне интересно на сколько корректно делать так: Код: java 1. 2. 3. 4. 5. 6. Т.е. генерировать исключение прямо в методе validate? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 09:53 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
mad_nazgulJulT, Можно еще в SomeClass навесить аннотации валидации на поля... :-) это не красивое решение, как мне показалось)) спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 09:54 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
JulT, а смысл? специально для этого предназначенный объект возвращается - резалт. там еще много интересных полей. а ты изобретать велосипед вытаешься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 11:03 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
IMHO надо различать валидацию полей и проверку БЛ. Например, "пользователь не найден" это БЛ и делать следует в сервисном слое. Т.е. запросы к БД делать в сервисном слое. Валидацию лучше на клиенте, ну или продублировать как тут указано выше разными способами. imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 11:20 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
Petro123, тогда уж валидить поля (на длину там или числа) в самой форме на клиенте, а бл это бл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 11:52 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
т.е. все-таки валидация через implements Validator это некая первичная проверка, которая по хорошему должна быть реализована на клиенте, а все остальные проверки уходят в сервисный слой. ок, спасибо, поняла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 11:59 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
ну там в принципе тоже можно засунуть скажем какую то обращалку в бд. не вижу проблемы если честно. тут скорее вопрос архитектуры. а так, имхо, это когда на голом жсп пишешь важно а если ты там что то с рестом мутишь то наверное можно и на клиенте я так думаю. смотря что. допустим, ты банк и тебе надо клиенту дать возможность перевода денег себе на другой счет у чела сто рублей на счету тут то ты явно не будешь делать валидацию на клиенте? а спринг раз и готовый валидатор тебе сует. не хочешь его валидатором пользоваться - пожалуйста распарсивай объект сам.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 12:08 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
lor2Petro123, тогда уж валидить поля (на длину там или числа) в самой форме на клиенте, а бл это бл. я про это и говорю. Просто аффтар сбил карты своим "Пользователь не найден". Это без базы в центре не узнать. У меня юзверя вообще ругаются если при ошибке по полям пропадают данные уже введённые (перезапрос странички). Приходится на JS или AJAX решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 12:52 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
ну чтоб введенные данные не пропадали нужно просто назад возвращать модель атрибутом во вьюшку Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 13:35 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
lor2, ок. Надо попробовать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 13:54 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
lor2ну чтоб введенные данные не пропадали нужно просто назад возвращать модель атрибутом во вьюшку Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 1)в вашем примере пользователя сразу перебросит на return "/auth/mycompany/mycompanyadd" 2)для чего в данном случае redirectAttributes? 3)а если сразу несколько разных пользователей открывают и дергают /add, и получают ошибку? в данном случае для каждого пользователя будет вызван свой изолированный modelMap.addAttribute("myCompany", myCompany); ? т.е. у каждого своя копия будет в рамках сессии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 14:03 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
JulT, редиректатрибьютс нужен для того чтоб с поста перслать назад на гет с нужными атрибутами, это надо для того чтоб хотя бы чел тупо на форме ф5 не нажал и второй-третий-десятый раз пост запрос не отправил. редиректить форму, не прошедшую валидацию смысла как ты понимаешь нет. - это на 1-2 ответ на 3) это не твоя головная боль, а спринга :) по факту же бины инициализируются как синглтоны, т.е. все глобальные переменные или как их там внутри бина будут доступны всем методам вызванными всеми пользователями. что там внутри метода происходит - происходит только для одного пользователя. если же ты хочешь весь бин изолированный то определяй скоуп бина. их три: сингл, сессия и еще какой я забыл на реквест кажется. по умолчанию сингл. в случае сессии поля бина будут свои для каждой отдельной сессии. возвращаясь к твоему вопросу: каждый юзер в метод передаст СВОЙ майКомпани, следовательно у каждого майкомпани по-своему и отработается в зависимости от содержимого полей. но вот если ты при скоупе по-умолчанию сделаешь в методе /адд зис.майкомпани=майкомпани, вот тогда будет интереснее )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 15:34 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
и да, если делаешь редиректатрибут в случае ошибки, то, собссно ошибка валидации не передается на форму в гетовый контроллере, там надо видимо, биндингрезалт передавать в гет. но, если честно я смысла не вижу в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 15:41 |
|
||
|
Spring validation
|
|||
|---|---|---|---|
|
#18+
спасибо!) т.е., получается, что вызов конкретного метода происходит в отдельном потоке, а это поток, интересно, создает веб контейнер(томкат и т.д.) или сам спринг? на сколько я помню это делает томкат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2016, 17:29 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39205229&tid=2124202]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
136ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 415ms |

| 0 / 0 |
