Как настроить сообщение об ошибке для неверного ввода?

#json #jsonschema #json-schema-validator

#json #jsonschema #json-schema-validator

Вопрос:

Как настроить сообщение об ошибке для неверного ввода?

  {
   "$schema": "http://json-schema.org/draft-04/schema#",
   "type": "object",
   "properties": {
     "username": {
       "type": "string",
       "pattern": "^[A-Za-z0-9-_.] $",
       "minLength": 3
     },
     "password": {
       "type": "string",
       "minLength": 8,
       "pattern": "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d\W]$"
     }
   },
   "required": [
     "username",
     "password"
   ],
   "errors": [
     {
       "property": "username",
       "message": "min 3 characters, do not use spaces or special characters"
     }
   ]
 }
  

Например, если ввод имени пользователя не имеет требуемой минимальной длины или не удовлетворяет шаблону регулярных выражений, отобразите одно пользовательское сообщение min 3 characters, do not use spaces or special characters

Ответ №1:

Пользовательские сообщения об ошибках не поддерживаются. Тем не менее, продолжается обсуждение возможности добавления подобной функции в следующую версию JSON Schema.

Обновление 2021-01-26

Схема JSON никогда не поддерживала настройку сообщений об ошибках таким образом. Основная проблема заключается в том, что соответствующее сообщение об ошибке зависит от аудитории и контекста, поэтому определение одного сообщения таким образом ограничивает. Например, разработчику нужна обратная связь, отличная от обратной связи конечного пользователя.

Вместо этого схема JSON стандартизировала результаты, которые возвращаются после проверки. Это позволяет вам обрабатывать результаты для получения выходных данных, подходящих для вашей аудитории. Теоретически библиотеки могут быть разработаны для создания сообщений об ошибках для определенных аудиторий. Они будут отделены от вашей библиотеки валидатора, что позволит вам легче переключаться на другую реализацию в будущем.

Однако даже лучшие библиотеки, создающие сообщения об ошибках, не решат конкретный случай, представленный в исходном вопросе. Библиотека не может принять регулярное выражение и выдать осмысленное сообщение. Хорошей новостью является то, что JSON Schema предоставляет механизм расширения, называемый словарями, который вы можете использовать для создания пользовательского ключевого слова для аннотирования ваших схем информацией, необходимой процессору вывода для создания лучшего сообщения об ошибке. Например, errors ключевое слово в исходном вопросе будет отображаться в стандартных выходных результатах и может использоваться процессором вывода как один из способов получения приятных сообщений об ошибках, с которыми сталкивается пользователь.

К сожалению, никто еще не создал ни одного из этих стандартных процессоров вывода, так что вы не сможете достать его с полки. Это не должно быть слишком сложно сделать, но вам придется написать это самостоятельно. https://github.com/atlassian/better-ajv-errors является одним из таких инструментов обработки вывода, но он использует собственный формат вывода ajv, а не стандартный формат.

Как стандартизированный формат вывода, так и словари схемы JSON являются новыми в проекте 2019-09, который пока не получил широкого распространения. Со временем мы ожидаем увидеть больше инструментов, упрощающих такого рода настройки.

Комментарии:

1. Я бы хотел, чтобы это было добавлено!

2. Я тоже, но, к сожалению, я не думаю, что это произойдет.

3. Я опубликую обновление ответа. Короткий ответ заключается в том, что пользовательские сообщения об ошибках по-прежнему не поддерживаются, но необходимые строительные блоки существуют, чтобы упростить расширение схемы JSON для поддержки пользовательских сообщений об ошибках.