@Service
class UserService(
private val userRepository: UserRepository,
private val passwordEncoder: PasswordEncoder
) {
private val logger = LoggerFactory.getLogger(UserService::class.java)
@Transactional
fun registerNewUser(dto: UserRegistrationDto): UserResponseDto {
validateUsername(dto.username)
checkUserUniqueness(dto)
val user = createNewUser(dto)
val savedUser = userRepository.save(user)
logger.info("User registered successfully: username={}", dto.username)
return mapToUserResponseDto(savedUser)
}
private fun validateUsername(username: String) {
val trimmedUsername = username.trim()
when {
trimmedUsername.length < 3 -> {
logger.warn("Username validation failed: too short ({})", trimmedUsername.length)
throw ValidationException("Username must be at least 3 characters long")
}
trimmedUsername.length > 20 -> {
logger.warn("Username validation failed: too long ({})", trimmedUsername.length)
throw ValidationException("Username must not exceed 20 characters")
}
!trimmedUsername.matches(Regex("^[a-zA-Z0-9_]+$")) -> {
logger.warn("Username validation failed: invalid characters")
throw ValidationException("Username can only contain letters, numbers, and underscores")
}
}
}
private fun checkUserUniqueness(dto: UserRegistrationDto) {
val errors = mutableListOf()
if (userRepository.existsByUsername(dto.username)) {
logger.warn("Username already exists: {}", dto.username)
errors.add("Username already exists")
}
if (userRepository.existsByEmail(dto.email)) {
logger.warn("Email already exists: {}", dto.email)
errors.add("Email already exists")
}
if (errors.isNotEmpty()) {
throw ValidationException(errors.joinToString("; "))
}
}
}
Проблема в том, что я могу ограничить ввод всех этих данных в своем приложении, но хотелось бы ограничить это на уровне API, чтобы не проходил прямой запрос с противоречивыми данными
Когда я делаю запрос к API в Postman, у меня все проходит хорошо, но должна появиться ошибка
Я уже пробовал несколько разных подходов, но ничего не меняется
data class UserResponseDto( val id: Long?, val username: String, val email: String ) [/code] [b]Но это не работает с моей пользовательской службой[/b] [code]@Service class UserService( private val userRepository: UserRepository, private val passwordEncoder: PasswordEncoder ) { private val logger = LoggerFactory.getLogger(UserService::class.java)
@Transactional fun registerNewUser(dto: UserRegistrationDto): UserResponseDto { validateUsername(dto.username)
checkUserUniqueness(dto)
val user = createNewUser(dto) val savedUser = userRepository.save(user)
private fun validateUsername(username: String) { val trimmedUsername = username.trim()
when { trimmedUsername.length < 3 -> { logger.warn("Username validation failed: too short ({})", trimmedUsername.length) throw ValidationException("Username must be at least 3 characters long") } trimmedUsername.length > 20 -> { logger.warn("Username validation failed: too long ({})", trimmedUsername.length) throw ValidationException("Username must not exceed 20 characters") } !trimmedUsername.matches(Regex("^[a-zA-Z0-9_]+$")) -> { logger.warn("Username validation failed: invalid characters") throw ValidationException("Username can only contain letters, numbers, and underscores") } } }
private fun checkUserUniqueness(dto: UserRegistrationDto) { val errors = mutableListOf()
if (errors.isNotEmpty()) { throw ValidationException(errors.joinToString("; ")) } } } [/code] Проблема в том, что я могу ограничить ввод всех этих данных в своем приложении, но хотелось бы ограничить это на уровне API, чтобы не проходил прямой запрос с противоречивыми данными Когда я делаю запрос к API в Postman, у меня все проходит хорошо, но должна появиться ошибка Я уже пробовал несколько разных подходов, но ничего не меняется