2016-07-02 4 views
0

Я пишу службу REST с использованием Spring Boot и JPA. Мне нужно иметь возможность проверить некоторые поля ввода, и я хочу, чтобы я использовал правильный шаблон для этого.Подтверждение ввода весны REST

Давайте предположим, что у меня есть следующая модель, и я также не имеют никакого контроля над моделью:

{ 
    "company" : "ACME" 
    "record_id" : "ACME-123" 
    "pin"  : "12345" 
    "company_name" : "" 
    "record_type" : 0 
    "acl"   : ['View','Modify'] 
    "language"  : "E" 
} 

Вещи, которые мне нужно сделать это:

  1. Убедитесь, что значение не является пустым - Это кажется достаточно простым, используя аннотацию @NotEmpty, и я могу передать сообщение.
  2. Убедитесь, что значение является частью допустимого списка значений. Пример здесь - это свойство языка в приведенной выше модели. Я хочу, чтобы значение было либо E, F, либо S. Это кажется возможным с помощью пользовательской аннотации (например, @ValidValue ({«E», «F», «S»})), но есть ли лучший способ «Springy» сделать это?
  3. Убедитесь, что значения в списке являются частью допустимого списка значений. Пример здесь - свойство acl. Опять же, это кажется возможным с помощью специальной аннотации, такой как @ValidListValues ​​({«Просмотр», «Изменить», «Удалить», «Скрыть»}), но тот же вопрос, что и выше.
  4. Установить значение по умолчанию - из того, что я прочитал, пользовательские аннотации проверки достоверности могут только проверять и не изменять. Я хотел бы сделать что-то вроде @DefaultValue (value = 5), если значение равно null. Это возможно? Подробнее об этом ниже.
  5. Задайте значение по умолчанию для возврата статического метода. Например, если поле pin в вышеприведенной модели не установлено, я хочу установить его как-то вроде Util.getRandomDigitsAsString (5).
  6. Использовать значения из другого свойства - я хотел бы проверить, что одно свойство содержит строку из другого свойства. Используя примерную модель, я хочу, чтобы record_id начинался с компании.

У меня есть эта настройка в том, что я считаю стандартным способом с контроллером -> сервис -> DTO -> DAO -> Модель. Другой вариант, о котором я думал, - это создать метод в validateCreate(), который будет проходить через все вышеперечисленные элементы и при необходимости вызывать исключение.

Спасибо.

ответ

1
  1. Да, NotEmpty правильный путь

  2. Вы должны определить Language ENUM. Языковое поле вашего POJO должно быть типа Язык

  3. То же, что и 2. Определить перечисление Acl.

  4. Определите это в коде Java. Инициализируйте значение поля по умолчанию 5. Если JSON содержит значение, Джексон установит значение поля в значение JSON. В противном случае он останется равным 5. Или инициализируйте поле нулевым значением и добавьте метод getValueOrDefault(int defaultValue), который возвращает значение по умолчанию, которое вы хотите, если значение равно null.

  5. То же 4

  6. Определение пользовательского валидатора, который применяется на самом классе, а не свойство класса. В валидаторе chec, что два соответствующих значения верны.

+0

Спасибо.Я дам им все это. Должны ли они выполняться в DTO или модели? – aaronanderson

Смежные вопросы