#java #spring #rest #validation
#java #весна #rest #проверка
Вопрос:
Я создаю приложение rest с помощью Spring Boot. У меня есть три логических уровня: контроллер, служба и репозиторий. Где я должен проверить, существует ли данное имя пользователя и аналогичные значения в базе данных?
На уровне контроллера я проверяю ввод пользователя (длина, размер и т.д.). Могу ли я также проверить наличие имени пользователя здесь? Например:
if(this.userService.existUserByUsername(request.getUsername()))
throw new ResponseStatusException(
HttpStatus.CONFLICT, "User with given username already exists");
Могу ли я проверить это на уровне сервиса, вызвав метод реестра (existByUsername) и выдав пользовательскую ошибку, затем обнаруженную в контроллере?
public void addUser(SignUpRequestDto signUpRequestDto){
if(this.userRepository.existsByUsername(signUpRequestDto.getUsername()))
throw new UserAlreadyExistException("User with given uusernamealready exist");
else
this.userRepository.save(this.convertSignUpRequestDtoToEntity(signUpRequestDto));
}
Или, может быть, я должен полагаться на аннотации hibernate для объектов и обрабатывать эти исключения?
@NotNull
@Column(name = "username", unique = true)
private String username;
Я действительно ценю все ваши отзывы.
Ответ №1:
Где я должен проверить, существует ли данное имя пользователя и аналогичные значения в базе данных?
Вероятно, в том же логическом слое, что и остальная часть вашей бизнес-логики. Уровень обслуживания?
На уровне контроллера я проверяю вводимые пользователем данные (длина, размер и т.д.). Могу ли я также проверить наличие имени пользователя здесь?
Вы можете, конечно. Вероятно, это не очень хорошая идея; анализ входных данных, чтобы убедиться, что они соответствуют схеме, которую вы понимаете, является пограничной проблемой. Использование входных данных, которые вы понимаете, является проблемой домена.
Могу ли я проверить это на уровне сервиса, вызвав метод реестра (existByUsername) и выдав пользовательскую ошибку, затем обнаруженную в контроллере?
Вы можете — вы можете получить некоторый отклик во время проверки кода на вопрос о том, является ли исключение правильным механизмом реализации для обработки этого. Существуют альтернативные подходы и компромиссы между ними, а также контексты (выбрасывание исключений внутри слоя или выбрасывание исключений между слоями).
Комментарии:
1. Хорошо, я понял. Спасибо за ваше мнение 🙂