Java EE/Restrições Embutidas: diferenças entre revisões
[edição verificada] | [edição verificada] |
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 |
<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).