При создании обработчиков ошибок я столкнулся с такой ситуацией: при редактировании или создании пользователя мне нужно убедиться, что 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
Программисты JAVA общаются здесь
1715211871
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.
Подробнее здесь: [url]https://stackoverflow.com/questions/78451593/why-is-saveuserwithexceptionhandling-method-working-when-trying-to-create-user[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия