Почему метод saveUserWithExceptionHandling() работает при попытке создать пользователя, но не работает при попытке редакJAVA

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

Сообщение Anonymous »

При создании обработчиков ошибок я столкнулся с такой ситуацией: при редактировании или создании пользователя мне нужно убедиться, что CPF и EMAIL уникальны, поэтому я создал этот метод
private User saveUserWithExceptionHandling(User user) {
try {
return userRepository.save(user);
} catch (DataIntegrityViolationException ex) {
String constraintName = ex.getMostSpecificCause().getMessage();
if (constraintName.contains("cpf")) {
throw new CpfUniqueViolationException(String.format("CPF %s já cadastrado", user.getCpf()));
} else if (constraintName.contains("email")) {
throw new EmailUniqueViolationException(String.format("E-mail %s já cadastrado", user.getEmail()));
}
throw ex;
}
}

Чтобы можно было использовать при создании
@Transactional
public User create(User user){
user.setPassword(passwordEncoder.encode(user.getPassword()));
return saveUserWithExceptionHandling(user);
}

и при редактировании пользователя
@Transactional
public User edit(Long id, UserDto userDto){
User user = userRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundExecption("User with id " + id + " not found"));
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setSkipNullEnabled(true);
modelMapper.map(userDto, user);

return saveUserWithExceptionHandling(user);
}

Он работает при попытке создать пользователя, но при попытке его редактирования выдает исключение в терминале и 403 клиенту
Это тело должно быть отправлено клиенту
{
"path": "/api/v1/user",
"method": "POST",
"status": 409,
"statusText": "Conflict",
"message": "CPF 36946809009 já cadastrado"
}

Обе ситуации (при попытке редактирования или создания) вызывают одну и ту же ошибку в зависимости от терминала
ERROR: duplicate key value violates unique constraint "uk_5iitu99yqr2bsphk865x552t0"
Detalhe: Key (cpf)=(36946809009) already exists.


Подробнее здесь: https://stackoverflow.com/questions/784 ... reate-user
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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