Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,095
1

[Service layer + webapp] Как поступать с непрохождением серверной валидацией пользователем?

13.09.2017, 12:02. Просмотров 325. Ответов 5
Метки нет (Все метки)


На stackoverflow пишут, что кидать исключения в ответ на неправильный input от пользователя - плохо.

Что в таком случае мне делать в слое сервисов? Я там делаю проверку объекта перед сохранением в БД(в случае если пользователь обойдет клиент сторону и сформирует форму сам).
Java
1
2
3
4
5
6
7
8
9
10
    @Override
    public int save(User user) throws SQLException, NamingException {
        if(Validator.validateEmail(user.getEmail())){
            // ???
        }
 
        // ???
 
        return userDao.save(user);
    }
Если не кидать исключения, то что делать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2017, 12:02
Ответы с готовыми решениями:

Паттерн Service Layer на с++
Помогите реализовать паттерн Service Layer на с++ - я уже где только не искал- но на с++ не нашел...

Как сделать полосу прокрутки в теге <layer></layer>?
Браузер NN. Нужно сделать полосу прокрутки слоя, как? Желательно показать кодом! Заранее...

Android Service, работающий даже после выключения пользователем приложения
Столкнулся со следующей проблемой: нужно чтобы Service работал даже после выключения пользователем...

A Windows service with the name MySQL already exists. Please uninstall this service correctly or choose a different name for the new service.
Не знаю что делать дальше

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы Java-разработчиков
5
2973 / 2515 / 778
Регистрация: 05.07.2013
Сообщений: 12,176
13.09.2017, 12:11 2
ты же хочешь отметить, какие филды неправильно заполнены, возвращай какой-нибудь ValidationResult
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,095
13.09.2017, 12:42  [ТС] 3
xoraxax, в моем понимании вот этот сервис нужен просто, чтобы не сохранить в БД неправильные данные.

Пользователю, который пытается обойти клиент сторону и формировать свою форму, явно не нужны сообщения о неправильности заполнения полей(в моем понимании, он просто хочет как-то обойти систему и у него плохие намерения). Я думаю о возврате какого-то обобщенного error page'a(по типу "Oops! Something bad happened").

Вопрос в том, как это сделать из сервиса(как не смешивать сервлетную часть с сервисом)?
0
2973 / 2515 / 778
Регистрация: 05.07.2013
Сообщений: 12,176
13.09.2017, 13:03 4
Чувак опечатался в одном из пятнадцати полей, а ты такой бдительный "Ooops!". И че он будет дальше делать?
0
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,095
13.09.2017, 13:04  [ТС] 5
xoraxax, валидация(jquery) на клиент стороне.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
13.09.2017, 14:15 6
Artmal, обычно на dto описываются констрейнты и валидируются через hibernate validator. в спринговых контроллерах можно в принципе на параметре метода повесить аннотацию и все свалидируется до захода в метод

потом результатом валидации становится исключение, которое обрабатывается ExceptionHandler'ом и преобразуется например в VndError

Добавлено через 1 минуту
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@ControllerAdvice
@Slf4j
public class ExceptionHandlingAdvice {
 
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ResponseBody
    public VndErrors handle(MethodArgumentNotValidException e) {
        log.error("Validation error", e);
        return new VndErrors(e.getBindingResult()
                .getFieldErrors()
                .stream()
                .map(fieldError -> new VndErrors.VndError(fieldError.getField(),
                        fieldError.getDefaultMessage()))
                .collect(Collectors.toList()));
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2017, 14:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как поступать с Connection?
У меня есть класс, который выполняет несколько десятков запросов к базе данных. Перед каждым...

Как поступать со спамерами на форуме?
Есть форум (про вязание спицами). Спамеры достали. Постят всякую хрень не интересную. Если я...

Куда, на что, и как поступать?
Здравствуйте, форумчане! В общем, учусь сейчас в 11 классе, и есть куча вопросов по поводу...

Как поступать с регистрами, которых мало?
Добрый вечер. Посмотрел несколько разных примеров программ, реализующих разные функции в МК. В...

Как поступать если метод стал deprecated?
Доброго дня! Как поступать если метод стал deprecated? Например, getColorStateList() устаревший...

Как переместить Layer на середину экрана, используя клиент JavaScript ?
Как переместить Layer на середину экрана, используя клиент JavaScript ? Сделал Layer (слой) на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.