1
00:00:00,210 --> 00:00:00,780
Bienvenidos.

2
00:00:00,870 --> 00:00:07,830
El siguiente paso es crear una clase Configuración de Spring MVC Web MS configuré para poder registrar

3
00:00:07,920 --> 00:00:10,560
este interceptor, lo tenemos que registrar en el stack.

4
00:00:10,690 --> 00:00:17,700
Entonces nos vamos a ir al Spring Woodford, al proyecto y en el paquete base, junto a la aplicación

5
00:00:17,700 --> 00:00:21,540
principal, vamos a crear una nueva clase de configuración personalizada.

6
00:00:23,350 --> 00:00:26,260
Cualquier nombre, pero ms conflic está perfecto.

7
00:00:27,760 --> 00:00:30,060
MS confi finalizarÃ.

8
00:00:30,940 --> 00:00:34,060
Bien, entonces, qué tiene que implementar la interfaz web?

9
00:00:34,180 --> 00:00:35,320
MS configure.

10
00:00:38,990 --> 00:00:41,600
Web MS configuré bien, pero antes continuar.

11
00:00:41,690 --> 00:00:49,730
Muy importante anotar con configuré schön bien, acá muchas veces se equivocan y colocan configurable

12
00:00:49,850 --> 00:00:57,500
y no tiene que ser configuré hecho esta anotación configure icho de Context anotado justamente para

13
00:00:57,650 --> 00:01:03,710
registrar Vinz y también para configurar en este caso el contexto MS para registrar un interceptor.

14
00:01:03,830 --> 00:01:08,470
Vamos a implementar un método en Source como siempre o be right.

15
00:01:09,230 --> 00:01:16,000
Por acá buscamos el método add interceptores agregar interceptores lo marcamos ok.

16
00:01:17,470 --> 00:01:18,340
Esto lo quitamos.

17
00:01:19,270 --> 00:01:23,590
Y utilizamos el objeto registry que recibió por argumento.

18
00:01:26,190 --> 00:01:27,180
AT Interceptor.

19
00:01:28,160 --> 00:01:34,670
Lleca necesitamos pasar la instancia, pero bueno, de donde obtenemos de acá esta nota con Componen,

20
00:01:34,730 --> 00:01:43,370
por lo tanto lo tenemos que inyectar entonces por acá privat el tipo bueno, podríamos incluso inyectar

21
00:01:43,400 --> 00:01:44,450
por el tipo concreto.

22
00:01:44,540 --> 00:01:49,250
Ahora, en caso de tener más de una implementación, también podemos implementar mediante la interfaz,

23
00:01:49,460 --> 00:01:54,630
por ejemplo Android Interceptor y acá Interceptor.

24
00:01:54,830 --> 00:01:58,310
Pero bueno, démosle un nombre, un nombre representativo.

25
00:01:58,520 --> 00:02:00,860
Tiempo transcurrido interceptor.

26
00:02:01,370 --> 00:02:02,270
Entonces por acá.

27
00:02:04,970 --> 00:02:06,290
Tiempo transcurrido.

28
00:02:06,380 --> 00:02:07,940
Interceptor perfecto.

29
00:02:09,480 --> 00:02:11,340
Puede copiar y lo pegamos acá.

30
00:02:11,460 --> 00:02:18,840
La instancia bien, importamos la interfaz y la idea es inyectar mediante esta interfaz.

31
00:02:18,900 --> 00:02:20,580
Pero claro, vamos a tener un problema.

32
00:02:21,390 --> 00:02:25,500
Puede que tengamos más de algún interceptor que implementa esta interfaz.

33
00:02:26,130 --> 00:02:27,600
Entonces, cuál inyectar?

34
00:02:27,690 --> 00:02:28,980
Por qué podrían haber más?

35
00:02:29,040 --> 00:02:30,840
Por qué podría existir más de un candidato?

36
00:02:31,500 --> 00:02:36,330
Entonces, como ya vimos en la clase componente, le podemos dar un nombre, por ejemplo.

37
00:02:37,140 --> 00:02:38,280
Tiempo transcurrido.

38
00:02:38,730 --> 00:02:44,070
Voy a copiar el nombre de la clase, lo pego y lo modifico en minúscula, comenzando en minúscula.

39
00:02:44,100 --> 00:02:46,560
Tiempo transcurrido interceptor.

40
00:02:46,680 --> 00:02:49,470
Lo podemos dejar con ese nombre o simplemente tiempo transcurrido.

41
00:02:50,910 --> 00:02:51,660
Aunque da lo mismo.

42
00:02:51,780 --> 00:02:54,090
Mejor interceptor con ese nombre.

43
00:02:54,180 --> 00:03:00,030
Entonces la idea es inyectar algún componente que tenga este nombre pero que implemente esa interfaz.

44
00:03:00,600 --> 00:03:01,320
Entonces, cómo?

45
00:03:01,410 --> 00:03:02,970
Bueno, volvemos acá.

46
00:03:05,810 --> 00:03:06,590
ÂTu Wired?

47
00:03:07,540 --> 00:03:13,150
Calificador cuali faya importamos y acá indicamos el nombre.

48
00:03:14,910 --> 00:03:16,320
Este nombre es importante.

49
00:03:17,070 --> 00:03:18,060
Acá me quedo con mayúscula.

50
00:03:18,090 --> 00:03:18,960
Tiene que ser con minúscula.

51
00:03:19,650 --> 00:03:27,030
Tiempo transcurrido, interceptor, guardamos, copiamos el nombre, volvemos acá y lo pegamos.

52
00:03:27,240 --> 00:03:30,930
Recuerden el mismo nombre en el cual Hilfiger que en el componente.

53
00:03:31,530 --> 00:03:36,780
Entonces dictamos travésdel calificador, pero la interfaz también guardamos bien.

54
00:03:36,840 --> 00:03:42,600
Si lo dejamos así, tal como está, el interceptor se va a aplicar a todas las rutas, a todos los controladores

55
00:03:42,720 --> 00:03:47,340
de forma global, a todas las rutas que tengamos, a los métodos handler, en fin, a todo.

56
00:03:47,460 --> 00:03:55,050
Pero después vamos a ver que podemos configurar que un interceptor se intercepte en algunas rutas o

57
00:03:55,110 --> 00:03:55,890
en patrones.

58
00:03:56,040 --> 00:04:04,380
Por ejemplo, después del add interceptor coloco un punto a path pattern o agregar un patrón de ruta

59
00:04:04,980 --> 00:04:07,950
y acá bueno, separado por coma o una lista.

60
00:04:08,070 --> 00:04:12,990
En realidad puede irse para Volkova una lista de rutas.

61
00:04:13,140 --> 00:04:19,050
Por ejemplo, quiero que solamente se ejecute en form y lo que venga.

62
00:04:19,140 --> 00:04:19,580
En fin.

63
00:04:21,330 --> 00:04:23,130
En Amín, qué sé yo.

64
00:04:23,880 --> 00:04:27,450
Usuarios o lo que sea, cualquier ruta que tengamos en la aplicación.

65
00:04:27,700 --> 00:04:29,520
Bueno, por el momento solamente tenemos form.

66
00:04:29,910 --> 00:04:33,240
Entonces podríamos agregar esa ruta form, pero eso después vamos a ver.

67
00:04:33,300 --> 00:04:36,870
Por ahora lo dejamos de esta forma para que se aplique todo bien.

68
00:04:36,930 --> 00:04:38,700
Guardamos y ya tenemos registrado.

69
00:04:38,700 --> 00:04:41,090
Tenemos configurado el tiempo transcurrido.

70
00:04:41,100 --> 00:04:44,550
Ta listo y le dimos un nombre con el cual la pasamos a la lista.

71
00:04:44,610 --> 00:04:51,600
Por lo tanto, ya podría mostrar este valor en la plantilla en la vista, así que nos vamos a las vistas.

72
00:04:52,260 --> 00:04:54,990
Por ejemplo, formulario y también resultado.

73
00:04:55,090 --> 00:04:56,130
Repartamos acá primero.

74
00:04:56,460 --> 00:05:05,130
Entonces, por acá arriba en el body vamos a tener un tip, un contenedor y dentro un texto un span.

75
00:05:05,580 --> 00:05:14,850
Como estamos usando Buttercup le podemos dar estilo, por ejemplo alert, una clase alert de alerta,

76
00:05:15,000 --> 00:05:16,350
pero su.

77
00:05:16,920 --> 00:05:18,840
Es decir, que se muestra de color verde.

78
00:05:19,970 --> 00:05:20,370
Bien.

79
00:05:21,200 --> 00:05:28,070
Y acá mostramos entonces con th texto el valor con el cual la pasamos a la vista.

80
00:05:28,400 --> 00:05:29,240
Tiempo transcurrido.

81
00:05:29,390 --> 00:05:30,410
Entonces lo voy a copiar.

82
00:05:31,370 --> 00:05:33,200
Volvemos acá de este texto.

83
00:05:33,680 --> 00:05:36,950
Si no, peso las llaves y esto tiempo trascurrido.

84
00:05:37,190 --> 00:05:39,500
Pero bien le podríamos dar también un texto.

85
00:05:39,590 --> 00:05:43,460
Podríamos concatenar un string comilla simple más.

86
00:05:43,580 --> 00:05:45,620
Y en la comida simple colocamos.

87
00:05:45,710 --> 00:05:46,970
Tiempo transcurrido.

88
00:05:49,730 --> 00:05:49,940
2.

89
00:05:49,940 --> 00:05:51,380
Punto espacio.

90
00:05:52,870 --> 00:05:57,850
Más comilla, simple espacio en milisegundos.

91
00:05:59,770 --> 00:06:00,400
Perfecto.

92
00:06:02,190 --> 00:06:07,630
Entonces, aplicar tanto al formulario como también resultaba acá.

93
00:06:08,250 --> 00:06:09,420
Entonces lo ponen a copiar y pegar.

94
00:06:09,840 --> 00:06:14,550
Bueno, puesto lo vamos a solucionar, porque cuando empezamos a copiar y pegar de una adicta, otra

95
00:06:14,610 --> 00:06:19,050
no es buena práctica, porque si copiamos en muchas partes y después tenemos que cambiar algo, bueno,

96
00:06:19,110 --> 00:06:23,070
vamos a tener que replicar este cambio en muchos lugares de nuestra aplicación.

97
00:06:23,140 --> 00:06:28,680
Entonces es mucho mejor reutilizar, es decir, crear alguna plantilla, algún fragmento de código que

98
00:06:28,680 --> 00:06:34,500
sea reutilizable y después lo podemos incluir en las demás vistas como un componente o como una directiva

99
00:06:34,590 --> 00:06:35,160
mucho mejor.

100
00:06:35,190 --> 00:06:36,900
Pero por ahora lo dejamos así.

101
00:06:38,180 --> 00:06:38,900
La idea es probar.

102
00:06:39,680 --> 00:06:40,340
Ahí tenemos.

103
00:06:40,550 --> 00:06:45,560
Entonces, recuerden, lo mostramos en la vista con el mismo nombre con el cual lo registramos acá.

104
00:06:45,680 --> 00:06:46,850
El tiempo transcurrido.

105
00:06:46,970 --> 00:06:47,780
Vamos a probar.

106
00:06:47,900 --> 00:06:48,890
Vamos a levantar.

107
00:06:53,650 --> 00:07:00,580
Bien, al formulario perfecto se fija el tiempo transcurrido 369 en milisegundos actualizamos.

108
00:07:01,490 --> 00:07:02,210
Es un rrando.

109
00:07:03,440 --> 00:07:06,660
Se fijan 3 62, actualizarnos 14.

110
00:07:07,830 --> 00:07:16,770
79 Claro, porque simulamos una sobrecarga en el Tried con una pausa que va de 0 a 4 99.

111
00:07:17,890 --> 00:07:19,890
Entonces se está aplicando a la ruta effort.

112
00:07:20,290 --> 00:07:20,770
Pero qué pasa?

113
00:07:20,940 --> 00:07:22,870
Resultado, por ejemplo, género.

114
00:07:23,500 --> 00:07:27,180
Bueno, completamos acá 12 el Yussef Naim.

115
00:07:31,210 --> 00:07:31,900
De alguna fecha?

116
00:07:33,880 --> 00:07:37,420
Enviar también se fijan 38 ml segunda.

117
00:07:39,250 --> 00:07:41,320
Así que se aplica a todas las rutas.

118
00:07:41,410 --> 00:07:44,140
Tanto formulario como Enver en cualquier parte.

119
00:07:44,800 --> 00:07:49,300
Recuerden que si actualizamos vuelve al formulario 3 61.

120
00:07:49,600 --> 00:07:53,230
Entonces está funcionando perfecto nuestro interceptor, tal como queríamos.

121
00:07:53,350 --> 00:07:57,820
Pero hay varias cosas que analizar, ver y mejorar, pero apartamos por algunas.

122
00:07:58,210 --> 00:08:00,340
Si se fijan en la consola está todo bien.

123
00:08:00,430 --> 00:08:01,690
No hay ningún error, muestra.

124
00:08:01,690 --> 00:08:03,910
Incluso los datos en el log se fijan.

125
00:08:04,180 --> 00:08:05,020
Podemos revisar el log.

126
00:08:05,470 --> 00:08:09,970
Tiempo transcurrido bueno, 3 79 milisegundos, pero un poco más arriba también.

127
00:08:10,540 --> 00:08:11,500
Por ejemplo acá.

128
00:08:11,560 --> 00:08:12,730
Tiempo transcurrido.

129
00:08:12,790 --> 00:08:15,420
Pareja Andel entrando perfecto.

130
00:08:15,430 --> 00:08:21,670
Luego se invoca el método tiempo transcurrido y después tiempo transcurrido post.

131
00:08:21,760 --> 00:08:26,720
Andal saliendo envuelve completamente la invocación del método que sería todo acá.

132
00:08:26,890 --> 00:08:32,140
Este sería el tiempo en que entra y sale el tiempo de ejecución del método.

133
00:08:33,040 --> 00:08:36,670
Bueno y después cuando actualizamos se repite entrando, saliendo.

134
00:08:36,740 --> 00:08:37,050
Bueno.

135
00:08:37,150 --> 00:08:38,200
Y los cálculos se fijan.

136
00:08:38,590 --> 00:08:39,490
Entrando y saliendo.

137
00:08:41,950 --> 00:08:44,110
Acá hicimos una validación en el controlador.

138
00:08:44,200 --> 00:08:45,970
Qué pasa si es nulo?

139
00:08:46,400 --> 00:08:49,210
Es importante validar porque por ejemplo, si lo comentamos.

140
00:08:51,290 --> 00:08:52,100
Es importante.

141
00:08:52,310 --> 00:08:57,260
Voy a guardar, comentamos esta validación, esperemos que se actualice perfecto y voy a actualizar

142
00:08:57,260 --> 00:08:57,550
acá.

143
00:08:58,900 --> 00:08:59,800
Funciona perfecto.

144
00:08:59,890 --> 00:09:00,640
No hay ningún error.

145
00:09:00,850 --> 00:09:04,240
Pero vamos a la consola, al terminal lanza un excepción.

146
00:09:04,300 --> 00:09:08,470
Un error, claro, porque también los recursos de la aplicación.

147
00:09:08,530 --> 00:09:13,240
Las hojas de estilos, los JavaScript, todo lo que estamos incluyendo también son pu.ta y también se

148
00:09:13,240 --> 00:09:14,460
están interceptando.

149
00:09:14,530 --> 00:09:17,440
Pero como son recurso no es un método del controlador.

150
00:09:17,470 --> 00:09:20,110
Por lo tanto, no tiene el model Ambigú.

151
00:09:20,260 --> 00:09:21,390
Es un contexto distinto.

152
00:09:21,400 --> 00:09:23,860
Por eso en nube y un objeto nulo.

153
00:09:23,890 --> 00:09:24,490
Punto.

154
00:09:24,550 --> 00:09:27,430
Un método lanza en NULL Pointer Exception.

155
00:09:28,570 --> 00:09:30,280
Entonces, en el post Andel.

156
00:09:31,240 --> 00:09:38,680
En la línea 43, justamente acá, lanza el error y es justamente como aplicada por los recursos estáticos,

157
00:09:38,860 --> 00:09:42,120
por las hojas, estilos, por todo lo que tenemos acá en estática.

158
00:09:42,820 --> 00:09:44,500
En este caso, bueno, hoja de estilos.

159
00:09:44,620 --> 00:09:47,950
Pero bien, cómo podemos ver o saber qué recursos se están invocando?

160
00:09:48,040 --> 00:09:50,280
Si es un controlador, si es un método Andel.

161
00:09:50,380 --> 00:09:52,600
Si es una hoja de estilo.

162
00:09:52,930 --> 00:09:55,840
Bueno, usando el Logger por acá es bien simple.

163
00:09:56,950 --> 00:10:01,150
Por ejemplo, por acá abajo vamos a imprimir el handler.

164
00:10:02,020 --> 00:10:03,400
Simplemente lo imprimimos.

165
00:10:08,200 --> 00:10:13,020
Por ejemplo, interceptando 2 punto handler guardamos.

166
00:10:13,180 --> 00:10:14,290
Esperemos que se actualice.

167
00:10:15,330 --> 00:10:16,920
Volvemos a refrescar.

168
00:10:18,480 --> 00:10:20,680
De Cádiz se interceptando acá.

169
00:10:22,720 --> 00:10:23,470
Lanza al error.

170
00:10:25,620 --> 00:10:33,420
Se fijan y acá está presente el content type, txt, css, nuestra hoja de estilo y un poco más arriba

171
00:10:33,420 --> 00:10:37,020
cuando imprimimos por acá tiene que estar acá, esta interceptando.

172
00:10:37,030 --> 00:10:42,000
Bueno, primero el controlador interceptando el controlador Font Controller.

173
00:10:42,060 --> 00:10:49,470
El método Form está perfecto, pero un poco más abajo también intercepta los recursos recursos http

174
00:10:49,560 --> 00:10:50,820
rickles, Andrés.

175
00:10:51,630 --> 00:10:54,090
Entonces acá hay un Metais Resources.

176
00:10:55,070 --> 00:10:55,670
Se fijan?

177
00:10:56,650 --> 00:11:00,790
Static public Bueno, y los recursos estáticos, entonces acá cuando falla.

178
00:11:00,840 --> 00:11:03,010
Entonces, por eso importante esta validación.

179
00:11:05,140 --> 00:11:07,810
Entonces, cuando valíamos, esperemos que se actualice.

180
00:11:07,900 --> 00:11:08,680
Perfecto.

181
00:11:09,220 --> 00:11:11,920
Incluso voy a limpiar la consola con Clear.

182
00:11:12,520 --> 00:11:13,390
Actualizamos.

183
00:11:15,220 --> 00:11:15,850
Y ya no hay error.

184
00:11:16,780 --> 00:11:22,620
Entonces es por eso importante, pero también podríamos validar que el handler acá se pasa como genérico

185
00:11:22,680 --> 00:11:23,070
Hoggett.

186
00:11:23,250 --> 00:11:27,060
Pero podríamos preguntar si es instancia de un handler método.

187
00:11:27,180 --> 00:11:29,700
Es decir, de un método handler del controlador.

188
00:11:30,600 --> 00:11:33,630
Y si es así, bueno, también podemos agregar esto acá.

189
00:11:34,080 --> 00:11:36,990
Entonces podemos dar una validación un poco más estricta.

190
00:11:37,560 --> 00:11:49,560
Entonces, si preguntamos, por ejemplo, si el objeto handler es instancia de instance of handler método

191
00:11:52,260 --> 00:11:54,730
y además que el modelo Amboise distinto nulo.

192
00:11:55,390 --> 00:12:00,600
Bien, voy a importar lo importamos de Spring framework web método.

193
00:12:02,000 --> 00:12:06,350
Perfecto, entonces, y Handler es una instancia de deján del método y además es distinto Nul.

194
00:12:06,470 --> 00:12:09,170
Incluso bastaría solamente con esto, solamente con esto.

195
00:12:09,260 --> 00:12:10,250
También va a funcionar.

196
00:12:10,430 --> 00:12:11,450
Incluso lo podemos probar.

197
00:12:12,260 --> 00:12:12,860
Guardamos.

198
00:12:12,960 --> 00:12:14,030
Esperemos que se actualice.

199
00:12:14,150 --> 00:12:14,900
Perfecto.

200
00:12:15,740 --> 00:12:16,820
Actualizamos acá.

201
00:12:18,520 --> 00:12:19,650
Volvemos tampoco darlos.

202
00:12:19,750 --> 00:12:24,590
Se fijan una validación a nivel de tipo de dato, aunque nunca está de más.

203
00:12:24,670 --> 00:12:27,430
También ser más estricto y dejarlo así.

204
00:12:27,640 --> 00:12:29,050
Yo creo que incluso queda mejor.

205
00:12:29,950 --> 00:12:34,660
Bien, voy a copiar Stiff tal cual acá y lo voy a pegar acá en el.

206
00:12:34,660 --> 00:12:36,400
Preguntele al principio.

207
00:12:38,810 --> 00:12:45,560
Bien, pero voy a quitar el modelo envío de que acá no se aplica, solamente quiero preguntar si es

208
00:12:45,560 --> 00:12:52,160
instancia de un método controlador y si es así Logger especialmente para tema de pag.

209
00:12:52,280 --> 00:12:54,440
O mostrar datos en la consola de análisis.

210
00:12:54,470 --> 00:12:54,860
En fin.

211
00:12:55,730 --> 00:12:56,510
Entonces Logger punto.

212
00:12:56,510 --> 00:12:57,080
Info.

213
00:13:01,810 --> 00:13:03,010
Es un método controlador.

214
00:13:03,310 --> 00:13:04,810
Incluso podremos imprimir el nombre.

215
00:13:04,930 --> 00:13:05,980
Cómo lo podemos imprimir?

216
00:13:06,080 --> 00:13:09,800
Bueno, haciendo un často, porque es todo acá.

217
00:13:09,970 --> 00:13:11,620
Object handler.

218
00:13:13,650 --> 00:13:14,540
Es del tipo genérico.

219
00:13:16,190 --> 00:13:18,890
Entonces la idea es convertir esto a un handler.

220
00:13:18,950 --> 00:13:19,370
Método.

221
00:13:23,530 --> 00:13:28,280
Entonces, andele, el método método del controlador y acá hacemos el cast.

222
00:13:29,310 --> 00:13:30,670
Entonces del tipo Hoggett.

223
00:13:30,910 --> 00:13:33,730
Acá hacemos un cast handle el método.

224
00:13:35,450 --> 00:13:36,370
Que tenemos el método.

225
00:13:38,360 --> 00:13:44,150
Punto de que tenemos varios métodos de este objeto, por ejemplo, el tipo del bin.

226
00:13:44,420 --> 00:13:45,750
El método cartoné.

227
00:13:45,770 --> 00:13:46,430
El método.

228
00:13:46,670 --> 00:13:47,290
Las anotaciones.

229
00:13:47,300 --> 00:13:49,580
El método, los parámetros del método.

230
00:13:49,820 --> 00:13:54,470
En fin, mucha información que podríamos querer utilizar, sobretodo como metadata.

231
00:13:54,980 --> 00:13:56,210
El tipo de retorno.

232
00:13:56,810 --> 00:13:57,200
En fin.

233
00:13:57,260 --> 00:13:59,960
Por ejemplo, guet, método, punto.

234
00:14:00,140 --> 00:14:05,870
Acá también anotaciones, tipos, todo, toda la información del método que se está invocando, los

235
00:14:05,870 --> 00:14:07,940
parámetros, la cantidad, parámetros.

236
00:14:08,690 --> 00:14:09,140
En fin.

237
00:14:09,830 --> 00:14:12,800
Entonces por acá solamente quiero imprimir el nombre.

238
00:14:12,890 --> 00:14:13,490
Nada más.

239
00:14:14,420 --> 00:14:16,670
Get por acá tenemos name.

240
00:14:17,510 --> 00:14:21,950
Apartó el más más kidney nombre método y guardamos.

241
00:14:22,130 --> 00:14:23,240
Esperemos que se actualice.

242
00:14:25,010 --> 00:14:26,810
Autorizamos por acá tiene que estar.

243
00:14:27,830 --> 00:14:29,860
Es un método del controlador Ford.

244
00:14:30,110 --> 00:14:32,570
Se fijan en nombre método formulario.

245
00:14:32,660 --> 00:14:37,880
Entonces podemos obtener todo el detalle del método que se está interceptando el controlador, incluso

246
00:14:37,880 --> 00:14:42,170
para temas estadísticos o de bitÃcora o de registro en el log.

247
00:14:42,290 --> 00:14:43,970
Podemos utilizar esta información.

248
00:14:44,360 --> 00:14:48,610
Bien, creo que estamos bien con el tiempo, así que continuamos en la siguiente clase.
