Skip to content
mobius1qwe edited this page Nov 5, 2026 · 1 revision

Home > Objetos no corpo > Validação 🚧

Validar o corpo antes do handler

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Vale para a 2.0 · Delphi XE em diante e Lazarus/FPC 3.2 em diante · Nível: básico

Em uma frase: regras na rota (ou atributos na classe) conferem o objeto lido do corpo; se alguma falha, o cliente recebe 422 com os erros por campo e o handler nem roda.

Você vai precisar: o pacote RALModuleObjectsPackage e uma rota de objeto.

Regras na rota (todos os compiladores)

No Object Inspector, ValidationRules da rota; em código:

Rota := Server.CreateObjectRoute('clientes', 'TCliente', Salvar);
Rota.ValidationRules.AddRule('Nome', vrRequired);
Rota.ValidationRules.AddRule('Nome', vrMaxLength, '60');
Rota.ValidationRules.AddRule('Email', vrEmail);
Rota.ValidationRules.AddRule('Idade', vrMin, '18');
Rota.ValidationRules.AddRule('Estado', vrIn, 'SP,RJ,MG');
Rota.ValidationRules.AddRule('Cpf', vrCustom, 'cpf', 'CPF inválido');
regra Value
vrRequired — (texto não vazio, objeto não nil, lista não vazia)
vrMinLength, vrMaxLength número de caracteres
vrMin, vrMax número (. decimal)
vrPattern expressão regular (RALRegex), o texto inteiro
vrEmail, vrUrl, vrUUID, vrDate —
vrIn valores separados por vírgula
vrCustom um nome; quem decide é OnCustomValidation

Um campo vazio só é julgado por vrRequired: as outras regras valem quando há valor. Message troca o texto padrão (que vem nos três idiomas do RAL).

vrCustom vai para o evento do TRALObjectSettings (ou RALObjectSettings.OnCustomValidation): acrescente campo=mensagem em AErrors para recusar.

Atributos (Delphi 2010 em diante)

uses RALObjectRTTI;

TCliente = class(TRALObject)
published
  [Required, MaxLength(60)]
  property Nome: string ...;
  [JSONName('e-mail'), Email]
  property Email: string ...;
  [Range(18, 120)]
  property Idade: Integer ...;
  [Pattern('[A-Z]{3}-\d{3}')]
  property Codigo: string ...;
end;

Atributos e regras da rota somam-se. No FPC 3.2 não há atributos: use as regras.

A resposta

{"type":"about:blank","title":"Um ou mais campos são inválidos","status":422,
 "errors":{"Nome":["é obrigatório"],"e-mail":["não é um e-mail válido"]}}

O campo sai com o nome do JSON (a convenção de Naming ou o [JSONName]). O status é RALObjectSettings.ValidationStatus (422; 400 se preferir). Em código, fora de uma rota: RALValidateObject(Obj, Regras, Erros) e RALAnswerValidation.

Erros comuns

sintoma causa
regra ignorada Field com outro nome (vale o da propriedade ou o do JSON)
vrMin falha com decimal escreva 1.5, não 1,5
atributo ignorado falta RALObjectRTTI no uses do projeto

Veja também

Clone this wiki locally