Size: a a a

Spring Framework and more

2019 April 04

PD

Plomipu Dmitri in Spring Framework and more
Здравствуйте. Есть такой вопрос по спрингу.
Нужно обработать самое последнее по вложенности исключение, которое связано с дупликатом

org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "ux_user_login"

для того чтобы обрабатывать исключения, разрабы спринга предусмотрели по-крайней мере три способа обработки. Как я понял это:

@ExceptionHandler - для обработки эксепшена для всех методов контроллера
@ControllerAdvice - глобальный для всех запросов в mvc контроллерах в java
@HandlerExceptionResolver для обработки всех эксепшенов глобально

вот сам кусочек кода:

@PostMapping
public void createUser( @RequestBody CreateUserDto userDto) {
userService.createUser(userDto);
}

мне надо в нём вернуть ResponceEntity с пустым телом, если всё ОК, а в случае выше приведённого исключения тело с определённым заголовком, которое кратко будет означать: в чём причина ошибки( в моём случае скажем строку "This email is busy"). Но как это сделать, если если у меня с самого начала ошибка компиляции, что PSQLException никогда не обработается в блоке try catch внутри метода mvc контроллера ??
источник

А

Артем Артемович Артемовский in Spring Framework and more
проверяй имейл перед сохранением и если есть - кидай свою ошибку и лови ее в адвайсе, например
источник

А

Артем Артемович Артемовский in Spring Framework and more
ну а эксепшн наследуй от рантайма, что бы не проверяемый был
источник

PD

Plomipu Dmitri in Spring Framework and more
Артем Артемович Артемовский
проверяй имейл перед сохранением и если есть - кидай свою ошибку и лови ее в адвайсе, например
а как же тогда респонс с этой ошибкой вернуть ??
источник

А

Артем Артемович Артемовский in Spring Framework and more
я имел в виду
User byEmail = repo.getUserByEmail(user.getEmail)
if (byEmail == null) {
repo.update(user)
} else {
throw new EmailException();
}
источник

А

Артем Артемович Артемовский in Spring Framework and more
а передавай в этой ошибке что угодно. конструктор ей сделай
источник

А

Артем Артемович Артемовский in Spring Framework and more
Артем Артемович Артемовский
я имел в виду
User byEmail = repo.getUserByEmail(user.getEmail)
if (byEmail == null) {
repo.update(user)
} else {
throw new EmailException();
}
а если с Optional работать так можно это не говородить. а сделать .orElseThrow()
источник

PD

Plomipu Dmitri in Spring Framework and more
я хочу не просто обработать исключение, но и вернуть responseEntity со своим дополнительным заголовком.
источник

PD

Plomipu Dmitri in Spring Framework and more
я имел в виду
User byEmail = repo.getUserByEmail(user.getEmail)
if (byEmail == null) {
repo.update(user)
} else {
throw new EmailException();
}
источник

PD

Plomipu Dmitri in Spring Framework and more
а передавай в этой ошибке что угодно. конструктор ей сделай
источник

PD

Plomipu Dmitri in Spring Framework and more
в случае эксепшена вернуть кастомный респонс
источник

А

Артем Артемович Артемовский in Spring Framework and more
ну перехватываешь ошибку в адвайсе, ставишь ответу новый респонс код и добавляешь в ошибку что надо
источник

А

Артем Артемович Артемовский in Spring Framework and more
источник

PD

Plomipu Dmitri in Spring Framework and more
ааа. Попробую. Спасибо вам Артемий за помощь. Просто я эту часть в спринге так дословно не изучал, поэтому волнуюсь как бы сработало поскорее ))
источник

PB

Pavel Bukhmatov in Spring Framework and more
AD поддерживает обращения по LDAP. А LDAP есть в Spring Security, да. Но LDAP =/= AD, так что некоторые фишки AD могут и не поддерживаться
источник

R

Roman in Spring Framework and more
Plomipu Dmitri
Здравствуйте. Есть такой вопрос по спрингу.
Нужно обработать самое последнее по вложенности исключение, которое связано с дупликатом

org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "ux_user_login"

для того чтобы обрабатывать исключения, разрабы спринга предусмотрели по-крайней мере три способа обработки. Как я понял это:

@ExceptionHandler - для обработки эксепшена для всех методов контроллера
@ControllerAdvice - глобальный для всех запросов в mvc контроллерах в java
@HandlerExceptionResolver для обработки всех эксепшенов глобально

вот сам кусочек кода:

@PostMapping
public void createUser( @RequestBody CreateUserDto userDto) {
userService.createUser(userDto);
}

мне надо в нём вернуть ResponceEntity с пустым телом, если всё ОК, а в случае выше приведённого исключения тело с определённым заголовком, которое кратко будет означать: в чём причина ошибки( в моём случае скажем строку "This email is busy"). Но как это сделать, если если у меня с самого начала ошибка компиляции, что PSQLException никогда не обработается в блоке try catch внутри метода mvc контроллера ??
получается, что  чтобы отмапить исключение можно не писать свой аспект? а использовать @HandlerExceptionResolver  ?
источник

R

Roman in Spring Framework and more
Pavel Bukhmatov
AD поддерживает обращения по LDAP. А LDAP есть в Spring Security, да. Но LDAP =/= AD, так что некоторые фишки AD могут и не поддерживаться
да, вот это и интересует. Например, после авторизации в домене Win хранит билет цербера локально и как этим можно пользоваться
источник

D

Danil in Spring Framework and more
Abilmansur
как изменить пароль ldap юзера? и как можно обойтись без spring data ldap?
public void changePassword(String userCN, String newPassword) {

       Attribute newattr = new BasicAttribute("unicodePwd", addQuotes(newPassword).getBytes(StandardCharsets.UTF_16LE));

       ModificationItem newitem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, newattr);

       ldapTemplate.modifyAttributes(userCN, new ModificationItem[]{newitem});

   }
источник

D

Danil in Spring Framework and more
Как раз через Spring Data не выходит поменять пароль в AD 😒 Или это у меня проблемы ?
источник

Д

Дмитрий in Spring Framework and more
всем привет, такой вопрос:

есть интерфей Something , у него есть 2 имплементации( SomethingRealImpl и SomethingMockImpl) и  может создаваться несколько экземпляров и того и другого с именами в зависимости от @ConditionalOnProperty, нужно проверить что есть хотя бы 1 бин SomethingRealImpl и в этом случае создать ещё несколько бинов, как это лучше сделать? Из-за ConditionalOnProperty там порядок создания мб любым и использовать @Conditional_ становится немного затруднительно
источник