Java EE/Restrições Embutidas: diferenças entre revisões

[edição verificada][revisão pendente]
Conteúdo apagado Conteúdo adicionado
m <source> -> <syntaxhighlight> (phab:T237267)
 
Linha 13:
===NotNull===
<code>@NotNull</code> define que a variável anotada não pode conter <code>null</code>. Enquanto <code>@Null</code> define que apenas <code>null</code> seja referenciado pela variável.
<sourcesyntaxhighlight lang="Java">
@Null
Throwable erroOuExcecao;
Linha 19:
@NotNull
Integer numero;
</syntaxhighlight>
</source>
 
===AssertTrue e AssertFalse===
<code>@AssertTrue</code> define que a variável deve ser <code>true</code>. Já <code>@AssertFalse</code> define o contrário. Obviamente apenas os tipos <code>Boolean</code> e <code>boolean</code> podem ser utilizados.
<sourcesyntaxhighlight lang="Java">
@AssertFalse
Boolean ligado;
Linha 29:
@AssertTrue
boolean funcionando;
</syntaxhighlight>
</source>
 
===Max e Min===
Linha 37:
 
Adicionalmente o tipo <code>String</code> também é suportado apesar de não constar na especificação.
<sourcesyntaxhighlight lang="Java">
@Max(42)
BigDecimal num;
Linha 43:
@Min(50)
int valor; //Será inicializado com 0 caso vinculado com <h:inputText>, porém a validação só ocorrerá na primeira submissão dos dados para o servidor.
</syntaxhighlight>
</source>
 
===DecimalMax e DecimalMin===
<code>@DecimalMax</code> e <code>@DecimalMin</code> são similares às de <code>@Max</code> e <code>@Min</code>, com a diferença de que seus elementos <code>value</code> são de tipo <code>String</code> e suportam valores decimais (na implementação esse elemento é convertido em BigDecimal).
 
<sourcesyntaxhighlight lang="Java">
@DecimalMax("200.77")
long num;
Linha 54:
@DecimalMin(".5")
Short valor;
</syntaxhighlight>
</source>
 
===Digits===
Linha 63:
Note que ao utilizar alguma classe que implemente <code>CharSequence</code> como tipo de uma variável anotada com <code>@Digits</code> somente números serão valores válidos.
 
<sourcesyntaxhighlight lang="Java">
@Digits(integer = 2, fraction = 1)
String valor;
Linha 69:
@Digits(integer = 2, fraction = 1)
Long numero; //Obviamente fraction é despropositado aqui, mas a funcionalidade de integer permanece.
</syntaxhighlight>
</source>
 
===Size===
Linha 76:
<code>CharSequence</code>, <code>Collection</code> (<code>ArrayList</code> e <code></code> p. ex.), <code>Map</code> e vetores são tipos suportados.
 
<sourcesyntaxhighlight lang="Java">
@Size(min = 1, max = 5)
ArrayList<SelectItem> vetor;
Linha 82:
@Size(min = 1, max = 5)
String palavra;
</syntaxhighlight>
</source>
 
===Pattern===
<code>@Pattern</code> restringe o conteúdo da variável a obedecer à uma expressão regular. O elemento obrigatório <code>String regexp</code> define a expressão regular.
 
<sourcesyntaxhighlight lang="Java">
@Pattern(regexp = "[A-Ea-e]")
String categoriaCNH;
</syntaxhighlight>
</source>
 
O elemento opcional opcional <code>Pattern.Flag[] flags</code> define alterações sobre a expressão regular especificada. Seu padrão é vazio.
Linha 101:
No exemplo abaixo o caracter <code>é (\u00e9)</code> foi decomposto em <code>´ (\u0301)</code> e <code>e (\u0065)</code> para a definição da expressão regular.
 
<sourcesyntaxhighlight lang="Java">
//Valores abaixo dependem da flag para que não haja violação das restrições.
@Pattern(regexp = "e\u0301", flags = Pattern.Flag.CANON_EQ)
Linha 108:
@Pattern(regexp = "\u0065\u0301", flags = Pattern.Flag.CANON_EQ)
String s = "é";
</syntaxhighlight>
</source>
 
====Pattern.Flag.CASE_INSENSITIVE====
Linha 115:
No código abaixo, <code>categoriaCNH</code> é aceito pela validação por conta da flag.
 
<sourcesyntaxhighlight lang="Java">
//O mesmo que definir "[A-Ea-e]" em regexp
@Pattern(regexp = "[A-E]", flags = Pattern.Flag.CASE_INSENSITIVE)
String categoriaCNH = "a";
</syntaxhighlight>
</source>
 
====Pattern.Flag.COMMENTS====
Linha 126:
A String <code>a</code> é aceita pela validação já que os caracteres após <code>#</code> na expressão regular são ignorados bem como o espaço em branco na expressão regular da anotação na variável <code>sigla</code>.
 
<sourcesyntaxhighlight lang="Java">
//O mesmo que definir "[A-Ea-e]" em regexp
@Pattern(regexp = "a#comentario", flags = Pattern.Flag.COMMENTS)
Linha 133:
@Pattern(regexp = "A B C", flags = Pattern.Flag.COMMENTS)
String sigla = "ABC";
</syntaxhighlight>
</source>
 
====Pattern.Flag.DOTALL====
A flag <code>Pattern.Flag.DOTALL</code> possibilita que a expressão regular <code>.</code> possa corresponder com [[w:en:Newline | caracteres de terminação de linha]].
 
<sourcesyntaxhighlight lang="Java>
@Pattern(regexp = "..", flags = Pattern.Flag.DOTALL)
String quebraDeLinha = "\n";
 
</syntaxhighlight>
</source>
 
====Pattern.Flag.LITERAL====
Linha 164:
Apenas <code>java.util.Date</code> e <code>Calendar</code> são tipos suportados para essas anotações. Provavelmente na próxima versão da especificação Bean Validation os tipos <code>LocalDate</code> e <code>LocalDateTime</code> serão suportados.
 
<sourcesyntaxhighlight lang="Java">
@Future
Date previsaoFormacao;
Linha 170:
@Past
Calendar aniversario;
</syntaxhighlight>
</source>
 
==Duplicação de restrições==
 
É possível utilizar diversas restrições para um mesmo campo.
<sourcesyntaxhighlight lang="Java">
@NotNull
@Digits(integer = 1, fraction = 3)
@Max(5)
BigDecimal precoLitroCombustivel;
</syntaxhighlight>
</source>
 
No entanto uma anotação não pode ser duplicada em um campo sem a utilização da anotação interna <code>List</code> presente em todas as anotações embutidas (que vêm junto da API).