При создании обработчиков ошибок я столкнулся с такой ситуацией: при редактировании или создании пользователя мне нужно убедиться, что 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
Почему метод saveUserWithExceptionHandling() работает при попытке создать пользователя, но не работает при попытке редак ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение