Я не могу понять, почему проверка DTO не работает.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Я не могу понять, почему проверка DTO не работает.

Сообщение Anonymous »

У меня есть DTO

Код: Выделить всё

data class UserRegistrationDto(
@field:NotBlank(message = "{username.notblank}")
@field:Size(min = 3, max = 20, message = "{username.size}")
@field:Pattern(
regexp = "^[a-zA-Z0-9_]+$",
message = "{username.pattern}"
)
val username: String,

@field:NotBlank(message = "{email.notblank}")
@field:Email(message = "{email.invalid}")
@field:Size(max = 100, message = "{email.size}")
val email: String,

@field:NotBlank(message = "{password.notblank}")
@field:Size(min = 8, max = 50, message = "{password.size}")
@field:Pattern(
regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,}$",
message = "{password.pattern}"
)
val password: String
)

data class UserResponseDto(
val id: Long?,
val username: String,
val email: String
)
Но это не работает с моей пользовательской службой

Код: Выделить всё

@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, у меня все проходит хорошо, но должна появиться ошибка
Я уже пробовал несколько разных подходов, но ничего не меняется

Подробнее здесь: https://stackoverflow.com/questions/792 ... oesnt-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»