Не обрабатывается исключение индекса уникальности БД Postgres (UTF-8) в UI

Версия фреймворка
Jmix version: 2.2.1

Описание проблемы
Не обрабатывается исключение индекса уникальности БД Postgres (UTF-8) в UI

Шаги для воcпроизведения
1.Создать проект Jmix (Java)
2.Создать datasource Postgres
3.В application.properties внести сточку:

jmix.data.unique-constraint-violation-pattern = ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности “(.+)”

  1. В messages_ru.properties внести сточку:

IDX_USER__ON_USERNAME = A user with the same username already exists

5.Попытаться создать пользователя admin

Примечание
Если поменять datastore на HSQL и паттерн для него, то все работает и отображается notification.

jmix.data.unique-constraint-violation-pattern = integrity constraint violation: unique constraint or index violation: (\S+)

Текущее поведение:

PSQLException: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "idx_user__on_username"
  Подробности: Ключ "(username)=(admin)" уже существует.

Здравствуйте.

Спасибо за сообщение об ошибке.

Данная проблема будет рассмотрена в рамках Localization does not apply to unique constraints in MSSQL · Issue #3030 · jmix-framework/jmix · GitHub

С уважением,
Иван

1 симпатия

Добрый день,

В рамках работы над указанным выше тикетом, более подробно изучили вашу ситуацию.
В соответствии с документацией Java файлы настроек загружаются в кодировке ISO 8859-1.

Чтобы использовать кириллицу нужно закодировать исходную строку в Unicode escape последовательность. Для этого можно в настройках IntelliJ IDEA указать автоматическую конвертацию (Settings → File Encodings → Transparent native-to-ascii conversion).

Или вы можете закодировать только одну нужную строку, без изменения настроек среды:
jmix.data.unique-constraint-violation-pattern = \u041E\u0428\u0418\u0411\u041A\u0410\u003A\u0020\u043F\u043E\u0432\u0442\u043E\u0440\u044F\u044E\u0449\u0435\u0435\u0441\u044F\u0020\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0020\u043A\u043B\u044E\u0447\u0430\u0020\u043D\u0430\u0440\u0443\u0448\u0430\u0435\u0442\u0020\u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0435\u0020\u0443\u043D\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\u0020\u0022\u0028\u002E\u002B\u0029\u0022

Более подробно можно посмотреть здесь.

После этого, указанный шаблон будет корректно обрабатываться, и в случае нарушения ограничения при создании новой сущности, в интерфейсе будет показано уведомление с ошибкой, а не исключение.

С уважением,
Илья

1 симпатия

Благодарю, оба варианта рабочие!