1
00:00:00,150 --> 00:00:03,990
Bien, continuamos implementando nuestra propia clase de validación personalizada.

2
00:00:04,110 --> 00:00:09,300
La idea de crear una clase que implementa el valida Héctor de Spring y en un método ahí podemos validar

3
00:00:09,300 --> 00:00:14,910
nuestros campos de forma más personalizada, ya sea con expresión regular o utilizando IF o también

4
00:00:14,910 --> 00:00:18,630
utilizando una clase de utilidades princ para validar.

5
00:00:18,690 --> 00:00:19,590
Bueno, cosa que queremos saber.

6
00:00:19,650 --> 00:00:21,920
Pero la idea es comentar esto de acá.

7
00:00:22,200 --> 00:00:27,080
Vamos a comentar el nombre porque el nombre lo vamos a aliar por la clase, la comentamos y también

8
00:00:27,090 --> 00:00:28,590
comentamos identificador.

9
00:00:28,680 --> 00:00:31,350
También lo vamos a validar en esta clase personalizada.

10
00:00:31,480 --> 00:00:35,880
Bien, entonces nos vamos a los package y vamos a crear un РАМКАХ solamente por un orden.

11
00:00:35,970 --> 00:00:38,520
Entonces App New Package.

12
00:00:39,860 --> 00:00:45,020
Llegar le colocamos valid lechon o variadores.

13
00:00:45,110 --> 00:00:48,590
En fin, el nombre que queramos por un orden nada más finalizar.

14
00:00:49,980 --> 00:00:51,460
Y acá esta clase.

15
00:00:51,630 --> 00:00:52,860
Una clase común y corriente.

16
00:00:53,370 --> 00:00:55,700
Le vamos a llamar usuario validador.

17
00:00:58,080 --> 00:00:59,760
Ven y implemento de interfaz.

18
00:00:59,790 --> 00:01:01,460
Un interfaz especial de Spring.

19
00:01:01,620 --> 00:01:07,890
La podemos implementar en mano con implemente o también le podemos agregar acá agregamos y acá buscamos

20
00:01:07,980 --> 00:01:08,860
validador.

21
00:01:09,870 --> 00:01:15,570
Pero es importante que sea del Package or Spring Framework Punto Valid, hecho muy importante que sea

22
00:01:15,810 --> 00:01:17,250
framework y no otro.

23
00:01:17,340 --> 00:01:18,390
No puede ser ni Hibari.

24
00:01:18,390 --> 00:01:20,200
De hecho en solamente Spring Framework.

25
00:01:20,550 --> 00:01:22,740
Ok, acá lo tenemos.

26
00:01:22,770 --> 00:01:29,100
Finalizar bien, este fican crea métodos para validar y un método soporte el mero soporte.

27
00:01:29,220 --> 00:01:35,160
Bueno, es super simple solamente para indicar qué clase Entity o POJO vamos a validar en este caso

28
00:01:35,190 --> 00:01:35,730
usuario.

29
00:01:36,330 --> 00:01:36,750
Ven acá.

30
00:01:36,750 --> 00:01:39,780
Falto guardar como comentamos acá.

31
00:01:39,870 --> 00:01:41,880
Voy a comentar también el import.

32
00:01:43,330 --> 00:01:49,540
Perfecto, guardamos, volvemos y tenemos que dar soporte al Entity a nuestra clase usuario.

33
00:01:50,650 --> 00:01:54,340
Punto class punto porque a buscamos?

34
00:01:54,490 --> 00:02:02,290
Si es así, nable desde este método es así enable from los seleccionamos llega, colocamos el class

35
00:02:02,350 --> 00:02:03,600
que se pasa por argumento.

36
00:02:04,420 --> 00:02:10,120
Entonces si la clase usuario es asignarle a la clase que se esta pasando por argumento a este tipo,

37
00:02:10,240 --> 00:02:15,130
entonces estaría correcto solamente para soportar y para validar que el objeto que estamos validando

38
00:02:15,190 --> 00:02:19,090
o que vamos a leer corresponda al tipo usuario y no otro.

39
00:02:19,390 --> 00:02:21,610
Esto lo quitamos el comentario perfecto.

40
00:02:21,880 --> 00:02:27,670
Bien, lo segundo muy importante es anotar con component para que se pueda inyectar después en el controlador

41
00:02:27,760 --> 00:02:28,370
y validar.

42
00:02:29,740 --> 00:02:31,720
Entonces lo marcamos como componentes Brink.

43
00:02:32,900 --> 00:02:34,860
Se registra y después lo podemos inyectar.

44
00:02:35,240 --> 00:02:35,900
Bien, perfecto.

45
00:02:35,920 --> 00:02:40,220
Acá recibimos el objeto, el target, en este caso del tipo usuario.

46
00:02:40,340 --> 00:02:41,960
Por lo tanto, tenemos que hacer un cast.

47
00:02:42,230 --> 00:02:50,390
Puede quitar esto del tipo usuario igual target, pero con el cast va a ser cast.

48
00:02:50,570 --> 00:02:55,040
Recuerden que con paréntesis usuario y listo.

49
00:02:55,280 --> 00:02:57,620
Acá tenemos el usuario y podemos validar su campo.

50
00:02:57,710 --> 00:03:03,230
Por ejemplo, el nombre, como lo dejamos comentado, el identificador y puede ser con if o como queramos.

51
00:03:03,290 --> 00:03:04,160
Acá validamos.

52
00:03:04,280 --> 00:03:07,010
Lo que sí, tenemos que registrar el error acá.

53
00:03:07,160 --> 00:03:12,740
Por eso se pasa el objeto errors y acá registramos el error con el método Reye Valium.

54
00:03:12,800 --> 00:03:13,880
Pero bueno, ahí lo vamos a ver.

55
00:03:14,000 --> 00:03:17,150
Primero vamos a validar que el nombre no sea ácido.

56
00:03:17,270 --> 00:03:17,780
Es decir.

57
00:03:18,840 --> 00:03:19,560
Esto mismo.

58
00:03:19,650 --> 00:03:20,550
Not empty.

59
00:03:21,280 --> 00:03:28,740
Pero usando la forma de una clase personalizada, entonces podemos utilizar la clase Halpert o de utilidades

60
00:03:28,740 --> 00:03:29,040
princ.

61
00:03:29,160 --> 00:03:31,310
Se llama validacion útiles.

62
00:03:33,750 --> 00:03:34,320
Punto.

63
00:03:34,430 --> 00:03:37,850
Bueno, ya que tiene metodos se fijan Reye if empty.

64
00:03:38,130 --> 00:03:42,510
Esto significa que rechaza la validación con un mensaje de error y estas osea un campo.

65
00:03:42,630 --> 00:03:44,970
Bien, hacemos un clic en raya if empty.

66
00:03:45,060 --> 00:03:50,570
Bueno, también está or espacio en blanco roget if empty or wait space.

67
00:03:50,790 --> 00:03:51,660
Pero después lo vamos a ver.

68
00:03:51,780 --> 00:03:55,140
Primero partamos por este y después vemos la diferencia entre uno y otro.

69
00:03:56,070 --> 00:03:58,680
Bien, primero el objeto error se pasa por argumento.

70
00:03:59,010 --> 00:03:59,760
Primer argumento.

71
00:03:59,820 --> 00:04:02,100
El segundo, el nombre de campo que queremos validar.

72
00:04:02,400 --> 00:04:08,010
Un string nombre mismo nombre que el nombre del atributo acá nombre.

73
00:04:09,060 --> 00:04:09,570
Nombre.

74
00:04:09,690 --> 00:04:10,100
Nombre.

75
00:04:10,140 --> 00:04:13,230
Atributo del objeto usuario se fija y acá?

76
00:04:13,560 --> 00:04:18,930
Bueno, vamos a pasar otro string con el mensaje error, pero no es el mensaje error literal, tiene

77
00:04:18,930 --> 00:04:23,220
que ser el mensaje error que está registrado en el properties.

78
00:04:23,580 --> 00:04:26,040
Por ejemplo, not empty usuario nombre.

79
00:04:26,130 --> 00:04:30,180
Podemos usar este mismo o podríamos crear otra entrada con otro nombre.

80
00:04:30,270 --> 00:04:30,780
Da lo mismo.

81
00:04:30,900 --> 00:04:36,210
Incluso le podríamos poner cualquier nombre en la llave con el texto, pero como ya lo tenemos, podríamos

82
00:04:36,210 --> 00:04:36,960
usar este mismo.

83
00:04:37,200 --> 00:04:38,100
Entonces lo copio.

84
00:04:39,600 --> 00:04:42,150
Y lo pego acá es super simple.

85
00:04:42,240 --> 00:04:45,060
Entonces, con esta clase de utilidad podemos validar.

86
00:04:45,190 --> 00:04:48,780
Bueno, otra alternativa también sería con IFF, por ejemplo.

87
00:04:48,930 --> 00:04:54,570
Esto no es necesario que lo hagan solamente para explicar if, por ejemplo usuario, punto nombre.

88
00:04:55,020 --> 00:04:59,710
Recuerden que con get punto llega tenemos is blank is.

89
00:04:59,820 --> 00:05:02,310
Ente podríamos validar y es cierto.

90
00:05:02,490 --> 00:05:03,510
Entonces si es vacío.

91
00:05:04,530 --> 00:05:08,760
Acá hacemos un reyecito pero utilizando este objeto.

92
00:05:09,510 --> 00:05:10,580
Erros erros.

93
00:05:10,680 --> 00:05:12,630
Punto raya valio.

94
00:05:12,740 --> 00:05:14,400
Porque acá tenemos el reye valio.

95
00:05:15,450 --> 00:05:19,110
El campo nombre y el código.

96
00:05:19,240 --> 00:05:21,330
Error Kot que apunta al properties.

97
00:05:23,250 --> 00:05:30,270
Se fijan entonces esto de acá es prácticamente lo mismo que esto es lo mismo, pero acá es más directo,

98
00:05:30,330 --> 00:05:33,800
se fijan, pueden usar cualquier dos y también tenemos Is blank.

99
00:05:33,960 --> 00:05:35,120
Y acá también es blank.

100
00:05:35,280 --> 00:05:39,330
Es decir, claro, porque podrían escribir nada puro espacio vacío en el nombre.

101
00:05:39,460 --> 00:05:40,920
Entonces con eso también lo valida.

102
00:05:40,990 --> 00:05:43,020
Pero bien, vamos a dejar este que es más directo.

103
00:05:43,140 --> 00:05:50,510
Vamos a quitar este IF y lo vamos a cambiar por otro if porque vamos a validar el identificador entonces.

104
00:05:50,580 --> 00:05:51,130
Usuario.

105
00:05:52,140 --> 00:05:54,360
Punto get identificador por acá.

106
00:05:55,110 --> 00:05:57,690
El objeto Street ya maneja expresiones regulares.

107
00:05:57,810 --> 00:06:01,380
Por acá tenemos matches, acá tenemos el método matches.

108
00:06:01,830 --> 00:06:04,000
Que argumento recibe una expresión regular.

109
00:06:04,350 --> 00:06:05,730
Se fijan, pero ya la tenemos.

110
00:06:05,940 --> 00:06:07,830
Vamos a ir a la clase usuario.

111
00:06:08,100 --> 00:06:10,290
Vamos a copiar esto tal cual, con las comillas.

112
00:06:11,520 --> 00:06:15,030
Incluyendo Comillas, es un string, lo pegamos acá.

113
00:06:15,210 --> 00:06:20,190
Entonces, si toda esta expresión del IF es igual a fours.

114
00:06:22,690 --> 00:06:27,610
Lo mismo erros, punto Reyes Balu, porque lo tenemos.

115
00:06:28,860 --> 00:06:30,840
El nombre campo bueno, en este caso.

116
00:06:31,860 --> 00:06:34,170
Sería identificar este nombre.

117
00:06:36,920 --> 00:06:43,070
Error, Koz, no lo tenemos, no tenemos ningún código de error para identificar, pero no importa,

118
00:06:43,070 --> 00:06:43,790
lo podemos crear.

119
00:06:44,030 --> 00:06:47,420
Por ejemplo, por aquí abajo le vamos a llamar Patten.

120
00:06:48,710 --> 00:06:53,590
Darle un nombre puede ser cualquiera, en este caso porque se coloca el código de forma literal.

121
00:06:53,630 --> 00:06:57,620
Entonces le vamos a colocar Patten todo minuscula o la P con mayúsculas lo mismo.

122
00:06:57,890 --> 00:06:58,760
Punto usuario.

123
00:06:59,630 --> 00:07:01,010
Punto identificar.

124
00:07:09,590 --> 00:07:10,880
Formato de la expresión regular.

125
00:07:10,970 --> 00:07:13,910
Incorrecto, perfecto, y voy a copiar esto tal cual.

126
00:07:14,980 --> 00:07:17,110
Y luego a pegar acá como un strength.

127
00:07:18,200 --> 00:07:23,690
Guardamos acá en Messages Properties y guardamos acá también nuestra clase personalizada.

128
00:07:23,810 --> 00:07:26,840
El balear, y así podremos paliar muchos campos, lo que queramos.

129
00:07:27,110 --> 00:07:29,600
Entonces, una alternativa usando anotaciones.

130
00:07:30,080 --> 00:07:37,500
Otra alternativa es de forma personalizada con la clase validacion útiles Reye if empty.

131
00:07:37,550 --> 00:07:42,320
En fin, diferentes alternativas o de forma más personalizada usando presiones regulares con nuestro

132
00:07:42,320 --> 00:07:43,640
propio algoritmo.

133
00:07:43,760 --> 00:07:44,060
En fin.

134
00:07:44,150 --> 00:07:47,630
Y siempre para rechazar una validación que incorrecta.

135
00:07:47,960 --> 00:07:54,880
Usamos el objeto errors reye válido el nombre el atributo del entity del objeto target en este caso

136
00:07:54,890 --> 00:08:01,220
usuario y el código del error que está registrado en Message Properties y lo tenemos que registrar.

137
00:08:01,790 --> 00:08:02,150
Es decir.

138
00:08:02,270 --> 00:08:03,220
Por cada mensaje error.

139
00:08:03,290 --> 00:08:05,570
Tenemos que colocarlo en el properties.

140
00:08:07,350 --> 00:08:11,430
Bien, igual, igual a FOLS se podría simplificar, por ejemplo, si le quito.

141
00:08:12,400 --> 00:08:12,660
Y acá?

142
00:08:12,740 --> 00:08:19,230
Bueno, esto ya lo saben, pero en el DIF colocábamos la negación sin declamación invertida, dice con

143
00:08:19,240 --> 00:08:26,380
aclamación si es distinto a matches, es decir, si no coincide entonces esto, porque el match lo que

144
00:08:26,380 --> 00:08:27,190
hace, si coincide.

145
00:08:27,260 --> 00:08:28,000
Si está correcto.

146
00:08:28,120 --> 00:08:31,000
Acá tenemos que negar que sea thru o que sea correcto.

147
00:08:31,060 --> 00:08:32,830
O que sea válido esta expresión regular.

148
00:08:33,160 --> 00:08:33,790
Guardamos.

149
00:08:33,970 --> 00:08:36,310
Bueno, lo siguiente el controlador.

150
00:08:36,730 --> 00:08:41,830
Tenemos que utilizar el usuario validad itor que implementa interfaz, pero bueno, para eso lo tenemos

151
00:08:41,830 --> 00:08:42,370
que inyectar.

152
00:08:42,490 --> 00:08:46,360
En este caso lo vamos a inyectar por el tipo concreto, porque es una clase de validador.

153
00:08:46,450 --> 00:08:49,090
No vamos a tener más de una implementación en nuestra aplicación.

154
00:08:49,260 --> 00:08:53,260
Ahora, en caso de que tuviéramos más de una implementación, podríamos crear nuestra propia interfaz

155
00:08:53,380 --> 00:08:56,060
que sea distinta a válida y distinta a la Spring.

156
00:08:56,470 --> 00:09:02,860
Tendríamos que implementar validad Itor de Spring Koma nuestra propia interfaz y ahí podríamos inyectar

157
00:09:02,890 --> 00:09:08,320
por nuestra interfaz, pero la nuestra no la de Spring, porque validad Itor es propia de Spring y podría

158
00:09:08,320 --> 00:09:12,370
haber otros objetos, otro pings, otra clase, batidoras que la implementen.

159
00:09:12,520 --> 00:09:17,470
Entonces, para no tener conflicto con los nombres de componentes en el QUALI, fallen o selector,

160
00:09:17,590 --> 00:09:20,200
es mejor usar una interfaz propia nuestra.

161
00:09:20,350 --> 00:09:23,710
Pero nuestro caso para el ejemplo vamos a inyectar la clase.

162
00:09:23,800 --> 00:09:29,410
El tipo concreto, no la interfaz LaHaye Como digo, la mayoría de las veces vamos a tener un solo validador

163
00:09:29,500 --> 00:09:31,660
o clase válida ahora para el usuario.

164
00:09:32,260 --> 00:09:33,360
Nos vamos a controlador.

165
00:09:33,820 --> 00:09:40,810
El atributo del tipo usuario validador validador importamos.

166
00:09:42,020 --> 00:09:45,590
Atura Importamos.

167
00:09:45,770 --> 00:09:46,340
Perfecto.

168
00:09:47,060 --> 00:09:47,730
Ahí lo tenemos.

169
00:09:47,960 --> 00:09:52,620
Y para variar eso simple, usamos la instancia que se inyecta validador acá.

170
00:09:53,030 --> 00:09:53,870
Entonces por acá.

171
00:09:54,080 --> 00:09:55,640
Punto validad.

172
00:09:57,420 --> 00:09:58,140
Y qué pasamos?

173
00:09:58,230 --> 00:10:05,700
El objeto target, en este caso el usuario este de acá, que se pasa por argumento y errors, error

174
00:10:05,700 --> 00:10:06,840
sería resulto.

175
00:10:09,050 --> 00:10:15,850
Pasamos resulto el bitten resulto al final el Binet resultan bien es del tipo error errors para la validación.

176
00:10:16,310 --> 00:10:17,210
Perfecto, estamos listos.

177
00:10:17,270 --> 00:10:24,470
Hay validamos de forma explícita usando el método Valides, el mismo método que tenemos acá valide acá

178
00:10:24,470 --> 00:10:30,800
pasamos el usuario, el target y acá el result o errors para registrar los errores.

179
00:10:30,860 --> 00:10:35,510
En caso de que no sea válido, en caso de error, de que no cumpla con la validación.

180
00:10:37,230 --> 00:10:39,180
Guardamos, levantamos y probamos.

181
00:10:48,670 --> 00:10:49,720
Nos vamos a el formulario.

182
00:10:50,080 --> 00:10:56,470
Primero voy a quitar John, voy a quitar también identificador validamos enviar formato.

183
00:10:56,470 --> 00:10:57,340
La expresión regular.

184
00:10:57,460 --> 00:10:58,030
Incorrecto.

185
00:10:58,060 --> 00:10:58,510
Perfecto.

186
00:10:58,600 --> 00:11:01,030
El campo nombre no puede ser vacío también.

187
00:11:01,080 --> 00:11:02,860
Tavian Entonces acá.

188
00:11:02,890 --> 00:11:04,090
Por ejemplo, Andrés.

189
00:11:05,680 --> 00:11:06,230
Desaparece.

190
00:11:06,400 --> 00:11:07,510
Así que lo validad bien.

191
00:11:08,020 --> 00:11:08,560
Y acá?

192
00:11:08,680 --> 00:11:09,700
Bueno, cualquiera.

193
00:11:09,760 --> 00:11:11,110
Por ejemplo este de acá.

194
00:11:11,230 --> 00:11:11,860
12.

195
00:11:11,950 --> 00:11:12,910
Punto 3.

196
00:11:12,910 --> 00:11:13,960
Dígito punto 3.

197
00:11:13,960 --> 00:11:17,870
Dígito guión con mayúscula o guión A con mayúscula.

198
00:11:18,430 --> 00:11:19,030
Enviar.

199
00:11:19,480 --> 00:11:19,990
Perfecto.

200
00:11:19,990 --> 00:11:20,440
Se fijan?

201
00:11:20,500 --> 00:11:21,070
Funciona bien.

202
00:11:21,160 --> 00:11:21,730
Lo valía.

203
00:11:21,910 --> 00:11:23,380
Si colocamos la con minúscula.

204
00:11:25,520 --> 00:11:28,760
Enviar incorrecto tiene que ser con mayúscula.

205
00:11:28,920 --> 00:11:32,480
Bueno, y también pueden probar con cualquier tipo de carácter, con coma.

206
00:11:33,610 --> 00:11:36,460
Enviar se fijan, tiene que ser con los puntos.

207
00:11:36,510 --> 00:11:42,190
Bueno, tal cual como en nuestro patrón punto a enviar.

208
00:11:42,610 --> 00:11:43,510
Funciona bien.

209
00:11:43,600 --> 00:11:45,880
Nada más continuamos en la siguiente clase.
