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

Origem: Wikilivros, livros abertos por um mundo aberto.
[edição verificada][edição verificada]
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição
Linha 76: Linha 76:
<hr>
<hr>


<code>@Pattern</code> restringe o conteúdo da variável obedecer à uma expressão regular. O elemento obrigatório <code>String regexp</code> define a expressão regular.
<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.


<source lang="Java">
<source lang="Java">
Linha 84: Linha 84:


O elemento opcional opcional <code>Pattern.Flag[] flags</code> define alterações sobre a expressão regular especificada. Seu padrão é vazio.
O elemento opcional opcional <code>Pattern.Flag[] flags</code> define alterações sobre a expressão regular especificada. Seu padrão é vazio.

As flags abaixo listadas são as mesmas constantes no objeto <code> [https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html Pattern] </code> do Java SE 8.


<source lang="Java">
<source lang="Java">
Linha 89: Linha 91:
String categoriaCNH; //a flag definida permite que as letras sejam válidas maiúsculas ou não.
String categoriaCNH; //a flag definida permite que as letras sejam válidas maiúsculas ou não.
</source>
</source>

<code>Pattern.Flag.CANON_EQ </code>

<code>Pattern.Flag.CASE_INSENSITIVE</code>

<code>Pattern.Flag.COMMENTS</code>

<code>Pattern.Flag.DOTALL</code>

<code>Pattern.Flag.LITERAL</code>

<code>Pattern.Flag.MULTILINE</code>

<code>Pattern.Flag.UNICODE_CASE</code>

<code>Pattern.Flag.UNICODE_CHARACTER_CLASS</code>

<code>Pattern.Flag.UNIX_LINES</code>



<hr>
<hr>


<code>@Future</code> e <code>@Past</code> definem que as variáveis representem apenas data futura ou passada, respectivamente.
<code>@Future</code> e <code>@Past</code> definem que a variável represente apenas data futura ou passada, respectivamente.


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.
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.

Revisão das 13h43min de 11 de dezembro de 2015

O pacote javax.validation.constraints contém as restrições definidas pela API.

Abaixo são descritas todas as anotações contidas no pacote citado. Caso um tipo primitivo seja utilizado, ele será convertido no objeto wrapper correspondente para a realização da validação.


@NotNull, conforme vista na seção anterior, define que a variável anotada não pode ser nula. Qualquer tipo de variável de referência pode ser utilizado.

@Null restringe de forma oposta à @NotNull, definindo que a variável anotada deve apenas ser null.

@Null
Object obj;

@AssertTrue define que a variável deve ser true. Já @AssertFalse define o contrário. Obviamente apenas os tipos Boolean e boolean podem ser utilizados.

@AssertFalse
Boolean ligado; //Caso vincule com um componente <h:selectBooleanCheckbox> não esqueça de inicializá-la com true ou false!

@AssertTrue
boolean funcionando;

@Max restringe a variável a armazenar valor igual ou menor ao que essa anotação define. @Min restringe de forma inversa. Apenas valores do tipo long são suportados no elemento value dessas anotações.

BigDecimal, BigInteger, long, int, short, byte e seus objetos wrapper respectivos são suportados pelas anotações. double e float não são suportados devido ao seu erro de arredondamento.

Adicionalmente o tipo String também é suportado apesar de não constar na especificação.

@Max(42)
BigDecimal num;

@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.

@DecimalMax e @DecimalMin são similares às de @Max e @Min, com a diferença de que seus elementos value são de tipo String e suportam valores decimais (na implementação esse elemento é convertido em BigDecimal).

@DecimalMax("200.77")
long num;

@DecimalMin(".5")
Short valor;

@Digits restringe a quantidade máxima de dígitos que uma variável pode conter. O elemento int integer restringe os dígitos inteiros e o int fraction os decimais. Ambos os elementos são obrigatórios.

BigDecimal, BigInteger, CharSequence (StringBuilder e String p. ex.), long, int, short, byte e seus objetos wrapper respectivos são suportados pelas anotações.

Note que ao utilizar alguma classe que implemente CharSequence como tipo de uma variável anotada com @Digits somente números serão valores válidos.

@Digits(integer = 2, fraction = 1)
String valor; 

@Digits(integer = 2, fraction = 1)
Long numero; //Obviamente fraction é despropositado aqui, mas a funcionalidade de integer permanece.

@Size restringe a quantidade mínima e/ou máxima de caracteres que a variável anotada pode conter e de elementos que uma coleção pode ter. O elemento int min define o a quantidade mínima e o int max a máxima. Ambos os elementos são opcionais, seus valores padrão são 0 e Integer.MAX_VALUE respectivamente.

CharSequence, Collection (ArrayList e p. ex.), Map e vetores são tipos suportados.

@Size(min = 1, max = 5)
ArrayList<SelectItem> vetor; 

@Size(min = 1, max = 5)
String palavra;

@Pattern restringe o conteúdo da variável a obedecer à uma expressão regular. O elemento obrigatório String regexp define a expressão regular.

@Pattern(regexp = "[A-Ea-e]")
String categoriaCNH;

O elemento opcional opcional Pattern.Flag[] flags define alterações sobre a expressão regular especificada. Seu padrão é vazio.

As flags abaixo listadas são as mesmas constantes no objeto Pattern do Java SE 8.

@Pattern(regexp = "[A-E]", flags = Pattern.Flag.CASE_INSENSITIVE)
String categoriaCNH; //a flag definida permite que as letras sejam válidas maiúsculas ou não.

Pattern.Flag.CANON_EQ

Pattern.Flag.CASE_INSENSITIVE

Pattern.Flag.COMMENTS

Pattern.Flag.DOTALL

Pattern.Flag.LITERAL

Pattern.Flag.MULTILINE

Pattern.Flag.UNICODE_CASE

Pattern.Flag.UNICODE_CHARACTER_CLASS

Pattern.Flag.UNIX_LINES



@Future e @Past definem que a variável represente apenas data futura ou passada, respectivamente.

Apenas java.util.Date e Calendar são tipos suportados para essas anotações. Provavelmente na próxima versão da especificação Bean Validation os tipos LocalDate e LocalDateTime serão suportados.

@Future
Date previsaoFormacao;

@Past
Calendar aniversario;

Duplicação de restrições

É possível utilizar diversas restrições para um mesmo campo.

@NotNull
@Digits(integer = 1, fraction = 3)
@Max(5)
BigDecimal precoLitroCombustivel;

No entanto uma anotação não pode ser duplicada em um campo sem a utilização da anotação interna List presente em todas as anotações embutidas (que vêm junto da API).