Manejando excepciones con la anotación @ControllerAdvice + concepto de Circuit Breaker (Cortocircuito)

¿Qué es @ControllerAdvice?

Anotación de Spring Boot @ControllerAdvice se introduzco a partir de la versión 3.2 en adelante (con 3.2 nos realmente nos referimos a 1.3.2). Podemos ver la versión de Spring Boot que estamos utilizando en el momento de levantar nuestra aplicación de Spring Boot desde la consola/terminal. En este caso en particular, podemos observar que estoy trabajando con la versión 2.2.2 (si tenéis una versión diferente no os preocupéis siempre que sea superior a la 1.3.2 ya que sino no sería compatible con @ControllerAdvice).

La anotación @ControllerAdvice nos permite manejar las excepciones (handler exceptions) de nuestra aplicación. Su peculiaridad es que esta anotación no maneja las excepciones por ejemplo de un controlador en específico, sino que manejará/capturará todas las excepciones de toda nuestra aplicación. Vamos a ver un ejemplo.

Creando el proyecto

Creamos un proyecto y le añadimos las dependencias:

La estructura del proyecto será:

Time.java

Vamos a crear una clase estática para no tener que realizar el new cada vez que la usemos.

Response.java

Si lo hacemos con la manera tradicional (con Getters&Setters y constructores), es decir, sin Lombok.

O la con Lombok (la más elegante y por tanto la manera más aconsejada), si no lo conocéis os aconsejo primeramente mirar el artículo: Introducción a Lombok donde preparamos el IDE y explicamos las diferentes anotaciones que tenemos.

En este caso en particular, usaremos la anotación @Data (que si hacemos memoria sería equivalente a definir: @Setter, @Getter, @RequiredArgsConstructor, @ToString y @EqualsAndHahsCode) y finalmente añadiremos también los constructor con @NoArgsConstructor y @AllArgsConstructor.

Y si vamos a Window>Show View > Outline podemos ver que internamente y aunque no están visibles desde dentro la de la clase, tenemos los Getters & Setters y constructores correctamente creados:

AnimalController.java

Si analizamos el siguiente controlador podemos ver que hemos definido un método llamado getAnimals() en el que tenemos 3 animales definidos dentro de un lista de Strings. En este caso en particular, los hemos realizado así para no tener que quitar el foco del protagonista de este artículo que es el manejo de errores. Aunque lo más común y lo ideal como ya hemos visto en el artículo CRUD REST con Spring Boot y JPA sería que los animales vinieran de la capa de repositorio. Pueden existir muchos factores que provoquen un error en la petición al repositorio y aunque nosotros ya hemos trabajado anteriormente con opcionales, estos cubrían en parte todo esto, lo aconsejable es proteger más aún el código además de tener un control sobre él porque pasa algo y tener un poco más de contexto para que sea más fácil detectar porque se produce un error. Todo esto, también os aseguro que nos ayudará a dormir un poco más tranquilos por la noche.

Si mostramos todos los animales (método getAnimals) vemos que no no hay problema alguno, nos muestra el listado porque está lleno.

O desde Postman:

Pero si os planteo el escenario de ¿Qué pasaría si la lista estuviera vacía? Pues en esa situación por el momento nos salvamos del error.

En cambio, si ejecutamos el método getAnimalById y mantenemos el listado vacío o intentamos acceder a una posición del array que no esté previamente definida. ¿Qué pasará?

Tras la ejecución podemos observar cómo se queja en el Terminal:

¿Qué vamos a hacer para manejar las excepciones?

Lo que vamos a hacer es manejar excepciones es:

  • Manejar/capturar excepciones sobre un controlador en específico: en nuestro caso manejaremos las excepciones del tipo IndexOutOfBoundsExceptions que se produzcan únicamente sobre nuestro controlador AnimalsController. El manejo de las excepciones lo realizaremos mediante al uso de la anotación @ExceptionHandler sobre el que le detallaremos que capture las que sean de tipo IndexOutOfBoundsExceptions. Este tipo de excepciones se producirán al intentar acceder a un elemento del array que no existe. Un ejemplo del esquema hasta el momento podría ser:
  • Manejar/capturar del resto de excepciones mediante a una clase genérica: aunque aún la tenemos que definir. En nuestro caso la clase de llamará ExceptionGlobalResponse y contendrá la anotación @ControllerAdvice. Esta anotación, nos permitirá recibir todas las Excepciones que no capture la clase anterior (AnimalsController). Y si tenemos el @ExceptionHandler que capture esa excepción podremos manejarla a nuestro gusto. Un ejemplo del esquema completo podría ser:

Manejando Excepciones especificas con @ExceptionHanler para un controlador en específico (AnimalController)

La anotación @ExceptionHanler, nos permite manejar las Excepciones a partir de un método desde dentro de una clase. Por el momento vamos a manejar únicamente y desde y para nuestro controlador AnimalController las Exceptions de tipo IndexOutOfBoundsException. De esta manera, cada vez que se llame a getAnimalById y no exista el elemento al producirse una excepción de tipo IndexOutOfNoundsException esta excepción será capturada/manejada por el propio controlador AnimalController.

Si vemos este esquema de las excepciones nos puede ayudar para situarnos correctamente:

Si ahora arrancamos la aplicación de nuevo e intentamos realizar una petición sobre el elemento 5 por ejemplo, podemos observar que nos muestra:

En el método getAnimalById de la clase AnimalController hemos dejado preparada la generación de una Excepción cuando el parámetro que se introduzca sea 10. Si la testeamos podemos ver que vuelve a petar:

Manejando Excepciones globales con @ExceptionHanler y @ControllerAdvice (ExceptionGlobalRespons)

Para solucionar esto vamos a generar un Controller que capture todas las excepciones de tipo RunTime y Exception. Si no tenemos la excepción capturada dentro del AnimalController, al no capturar la excepción, ya hemos visto el resultado.

Para solucionar esto usaremos la anotación @ControllerAdvice lo que hará Spring Boot es preguntarse ¿La clase captura esta excepción? Si la respuesta es si perfecto, si la respuesta es no lo mandará a la clase con la anotación @ControllerAdvice. Por tanto, lo que hará está clase es intentar capturar todas las excepciones que no se hayan capturado desde la clase donde se produzcan.

Vamos a ver un ejemplo:

Cada vez que se produzca un error, al tener declarados dentro del ExceptionGlobalResponse los métodos en el siguiente orden: primeramente manejarán los RunTimeExcepcion y posteriormente los que sean de tipo Exception.

La captura de estas excepciones se realizará a través de las anotaciones de mapeo como: @RequestMaping o las anotaciones “hijas” que salen de este elemento padre como son por ejemplo: @GetMapping, @PostMapping, @PutMapping, @DeleteMapping y @PatchMapping.

La anotación @ControllerAdvice se aplicará automáticamente a todas las clases que utilicen la anotación @Controller (anotación especifica de la anotación padre @Component) y/o @RestController (que extiende de @Controller).

Protegiendo tu aplicación de fallos externos concepto de Circuit Breaker (Cortocircuito)

Si hacemos pruebas sin proteger los errores (como ya hemos visto un poco más arriba) y no capturamos la excepción, pese a que ha producido una excepción podremos continuar lanzando peticiones. El flujo de ejecución no se detendrá y está nos responderá con normalidad. ¿A qué es debido esto? Esto se produce debido a que si se genera un fallo interno dentro de nuestra aplicación, que depende de nuestra aplicación (algo interno) y Spring Boot suele tener mecanismos para auto protegerse. Por lo tanto, en los errores internos no solemos tener problemas, pese a ello, mejor siempre protegernos. Si comparáramos esto con un de un contador de la luz sería como si Spring Boot bajará el plomo e inmediatamente lo subiera, pero a una velocidad imperceptible para nosotros. Y que solamente nos permite verlo por la consola y por el navegador al realizar la petición (siempre que no estemos hablando de un fallo muy muy muy grave que Spring Boot no pudiera salvar) y como hemos dicho no afectaría al funcionamiento (como norma general).

Pero ¿Qué pasa si el servicio no depende de Spring Boot? Y por ejemplo nos estamos intentando conectar a un servicio externo como puede ser: BBDD, servicios de otras compañías, APIs, etc. Aquí es donde está el problema, y os aconsejo que lo metáis en un try catch o bien que manejéis las excepciones o sino que os preparéis para algo similar al fuego de la siguiente imagen.

Ya que si por ejemplo, se pueden producir situaciones como:

  • Se corta la comunicación, sin restablecerte rápidamente antes de que se acabe el tiempo definido (time out) del protocolo TCP.
  • Se produce un pico de peticiones y no tenemos la suficiente escalabilidad para responder a estas peticiones el tiempo de respuesta se va aumentado hasta superar el tiempo definido (time out) del protocolo TCP.

La comunicación entre servicios externos se suele establecer mediante al protocolo de comunicación TCP (Transmission Control Protocol). Usualmente, suele tener establecido 30 segundos como configuración por defecto.

“Degrade elegante” o gracefully defradation

Si está conexión supera el tiempo establecido sin recibir respuesta alguna, se generará un error, este error será controlado/manejado mediante al manejo de excepciones que hemos visto anteriormente en este artículo. Gracias al cual podremos continuar respondiendo con mensajes por pantalla y no con errores mensajes de logger en un fichero o por consola.

El concepto de continuar respondiendo pese a que se produzca un error se conoce bajo el nombre de “degrade elegante” o gracefully defradation.

Espero que os haya gustado el artículo ¡Un saludo javer@s!

91 comentarios

  1. Muy buen tutorial, relamente he aprendido cosas nuevas de spring boot, lo recomiendo.

  2. Enrique Granados

    1 junio, 2020 a las 21:02

    Muy buen tutorial. Agradezco mucho el tiempo tomado y la atencion de ofrecerlo.
    Aprendi bastante acerca de boot spring y repase conceptos ya enpolvados de java , asi como me actualice en uno que otro tema nuevo.

    Muchas gracias!

  3. You made some decent points there. I checked on the internet for more info
    about the issue and found most individuals will
    go along with your views on this website.

  4. My brother suggested I might like this web site.
    He was entirely right. This post truly made my
    day. You can not imagine just how much time I had spent for this info!
    Thanks!

  5. Olá , muito interessante o seu blog! Adorei!.

  6. I am actually pleased to read this webpage posts which consists of lots
    of valuable information, thanks for providing these kinds of
    data.

  7. Hello there! Do you know if they make any plugins to protect against hackers?
    I’m kinda paranoid about losing everything I’ve worked hard on.
    Any suggestions?

  8. What a information of un-ambiguity and preserveness of precious know-how on the topic of unpredicted feelings.

  9. When some one searches for his essential thing, therefore he/she wishes to be
    available that in detail, so that thing is maintained
    over here.

  10. Hi there! I know this is kinda off topic however , I’d figured I’d ask.

    Would you be interested in exchanging links or maybe guest writing a blog article or vice-versa?

    My website discusses a lot of the same subjects as yours and I believe we could greatly benefit from
    each other. If you are interested feel free to send me
    an email. I look forward to hearing from you! Excellent blog by the way!

  11. Great goods from you, man. I have understand your stuff
    prior to and you are simply extremely magnificent.
    I really like what you’ve obtained right here, certainly like what you
    are saying and the way in which by which you are saying it.

    You are making it enjoyable and you still take care of to stay it sensible.
    I can’t wait to read much more from you. This is actually a wonderful website.

  12. I am actually thankful to the holder of this web page who has shared this fantastic post at at this place.

  13. I was very pleased to find this web site. I wanted to thank
    you for ones time for this particularly wonderful read!!
    I definitely appreciated every bit of it and i also have
    you saved as a favorite to see new things on your site.

  14. Link exchange is nothing else but it is just placing the other person’s webpage link on your page at suitable place and
    other person will also do same in support of you.

  15. Hi! I’ve been following your blog for some time now and finally got the bravery to go ahead and give you
    a shout out from Houston Texas! Just wanted to mention keep
    up the excellent job!

  16. Everyone loves what you guys tend to be up too. This type of clever work and coverage!
    Keep up the amazing works guys I’ve included you guys to blogroll.

  17. No matter if some one searches for his vital thing, therefore he/she wants to be available
    that in detail, so that thing is maintained over here.

  18. I am really inspired with your writing talents and also with the format on your
    blog. Is that this a paid subject or did you customize it your self?

    Either way keep up the nice high quality writing, it’s rare to look a nice blog like
    this one nowadays..

  19. I really like your blog.. very nice colors & theme. Did you create this website yourself or did you hire someone
    to do it for you? Plz answer back as I’m looking to design my own blog and
    would like to find out where u got this from. appreciate it

  20. Pretty! This has been an incredibly wonderful article.
    Thank you for supplying this info.

  21. Hi, i think that i saw you visited my weblog so i came to “return the favor”.I am trying to find things to improve my website!I suppose its ok to use some
    of your ideas!!

  22. Wow that was odd. I just wrote an really long comment but after I clicked submit my
    comment didn’t show up. Grrrr… well I’m not writing all that over again. Anyways, just wanted to say great blog!

  23. Hi there, There’s no doubt that your web site might be having
    internet browser compatibility issues. Whenever I take a look at your site in Safari, it looks fine but when opening in I.E., it has some overlapping issues.
    I merely wanted to give you a quick heads up! Other
    than that, fantastic website!

  24. Simply desire to say your article is as amazing.
    The clarity to your put up is simply cool and i can assume you are a professional in this subject.
    Fine with your permission allow me to clutch your feed to stay
    up to date with approaching post. Thank you one million and please carry on the rewarding work.

  25. Hello every one, here every person is sharing these kinds of knowledge, thus it’s fastidious
    to read this web site, and I used to pay a visit this web site all the time.

  26. Brilliant post alternatively I was wondering if you
    may write a litte more for that reason topic? We would be extremely grateful as
    you could wonderful a little bit on top of that.
    Thank you!Go to my internet site to read the most modern articles regarding adulador togel online.
    Just about all articles all of us write is going to be from revered
    sources.

  27. bookmarked!!, I like your web site!

  28. Desirable blog! We ran across it when ever surfing around
    in Yahoo Data. Do you have just about any tips on how to
    receive listed in Askjeeve News? I’ve truly in person been expecting for a while on the other hand
    I without a reason seem to arrive there! Many thanks

  29. Appreciation to my father who shared with me about this website, this blog
    is truly remarkable.

  30. I’m extremely inspired along with your writing abilities and also with the
    format to your weblog. Is that this a paid theme or did you customize it your
    self? Anyway keep up the nice high quality writing, it is rare to see a great weblog like this
    one today..

  31. Good day! I could have sworn I’ve been to this blog before but
    after browsing through some of the post I realized
    it’s new to me. Anyways, I’m definitely glad I found it and I’ll be book-marking and checking back often!

  32. You truly make this seem very easy with your physical appearance but Most of us find
    this sort of matter focus on actually an issue that I think
    Let me never enjoy. It seems likewise complex and very broad in my experience.
    I am looking forward for your next post, Sick and tired try to
    get used to it!

  33. Hi there mates, its great paragraph on the topic of cultureand fully defined,
    keep it up all the time.

  34. I don’t even understand how I stopped up here, but
    I assumed this submit was once great. I don’t realize who you
    might be however definitely you’re going to a famous
    blogger if you happen to aren’t already. Cheers!

  35. Hello to every one, the contents present at this web site are actually
    amazing for people experience, well, keep up the good work fellows.

  36. I read this article completely on the topic of the comparison of most recent
    and earlier technologies, it’s awesome article.

  37. I like the helpful info you provide in your articles.
    I’ll bookmark your blog and check again here regularly.
    I am quite sure I will learn many new stuff right here! Best of luck for the next!

  38. Nice post. I learn something new and challenging on sites I stumbleupon everyday.
    It’s always exciting to read articles from other writers and use a little something from other sites.

  39. Thanks for your marvelous posting! I really enjoyed reading it, you could be a great author.I will make sure to bookmark your blog and will come back very soon. I want
    to encourage that you continue your great writing, have a nice morning!

  40. I was excited to find this great site. I need to to thank you for your time for this
    particularly wonderful read!! I definitely enjoyed every bit of it and I have you bookmarked to see
    new information on your blog.

  41. You ought to take part in a contest for one of the
    most useful websites online. I most certainly will
    highly recommend this blog!

  42. Thank you for some other excellent post. The place else may anyone get that
    kind of information in such a perfect method of writing?

    I’ve a presentation subsequent week, and I am on the search for such
    information.

  43. Hey there! I’ve been reading your blog for
    some time now and finally got the bravery to go ahead
    and give you a shout out from Porter Texas!
    Just wanted to say keep up the great work!

  44. Do you have a spam issue on this website; I also am a blogger, and I was wanting to
    know your situation; many of us have developed some
    nice practices and we are looking to swap methods with other folks,
    please shoot me an e-mail if interested.

  45. I’m more than happy to find this great site. I wanted to
    thank you for your time for this wonderful read!! I definitely really
    liked every part of it and I have you book marked to see new stuff in your website.

  46. It’s a shame you don’t have a donate button!
    I’d definitely donate to this superb blog! I suppose for now i’ll settle for
    bookmarking and adding your RSS feed to
    my Google account. I look forward to fresh updates and will talk
    about this website with my Facebook group.
    Talk soon!

  47. This design is incredible! You most certainly know how to
    keep a reader entertained. Between your wit and your
    videos, I was almost moved to start my own blog (well, almost…HaHa!) Great job.
    I really enjoyed what you had to say, and more than that, how
    you presented it. Too cool!

  48. Howdy! I understand this is somewhat off-topic but I had to ask.
    Does running a well-established blog like yours take a massive amount work?
    I’m brand new to writing a blog however I do write in my journal daily.
    I’d like to start a blog so I will be able to share my experience and feelings online.
    Please let me know if you have any kind of recommendations or tips for
    new aspiring blog owners. Thankyou!

  49. Good info. Lucky me I ran across your site by accident
    (stumbleupon). I’ve book-marked it for later!

  50. Hello my friend! I wish to say that this article is amazing, nice written and include
    approximately all significant infos. I’d like to look more posts like this .

  51. Hi there to every , as I am genuinely eager of reading this webpage’s post to
    be updated regularly. It consists of pleasant material.

  52. you’re actually a just right webmaster. The site loading velocity is
    incredible. It kind of feels that you are doing any unique trick.
    Moreover, The contents are masterpiece. you have performed a magnificent process
    in this topic!

  53. WOW just what I was searching for. Came here by searching for best online casinos real money

  54. I don’t know if it’s just me or if perhaps everyone else experiencing problems with your blog.
    It appears as if some of the text within your content are running off the screen. Can somebody else please comment and let me know if this is happening to them as well?
    This may be a problem with my browser because I’ve had
    this happen previously. Kudos

  55. Wonderful article! This is the type of information that should be shared across the net.
    Disgrace on Google for not positioning this submit
    upper! Come on over and visit my site . Thank you =)

  56. This paragraph is genuinely a nice one it assists new internet visitors, who
    are wishing in favor of blogging.

  57. I’d like to find out more? I’d like to find out some additional information.

  58. I am genuinely grateful to the holder of this website who has shared
    this fantastic post at at this place.

  59. My brother recommended I would possibly like
    this website. He was entirely right. This publish actually made my day.
    You cann’t imagine simply how a lot time I had spent for this information! Thanks!

  60. Hi there, after reading this awesome piece of writing i am too cheerful to share my familiarity
    here with mates.

  61. Appreciate this post. Will try it out.

  62. Hi there, I enjoy reading all of your article. I like to write a little comment to support you.

  63. Oh my goodness! Impressive article dude! Many thanks, However I am experiencing
    problems with your RSS. I don’t know the reason why I cannot
    join it. Is there anybody getting similar RSS problems?
    Anyone that knows the solution can you kindly respond?
    Thanx!!

  64. Hello everyone, it’s my first visit at this web site, and post is genuinely
    fruitful in favor of me, keep up posting these
    types of content.

  65. Amazing things here. I’m very satisfied to peer your article.

    Thank you so much and I’m taking a look forward to contact you.
    Will you please drop me a mail?

  66. Everything is very open with a clear clarification of the issues.
    It was definitely informative. Your site is extremely helpful.
    Thanks for sharing!

  67. Greetings! I’ve been reading your website for a long time now and finally got the bravery
    to go ahead and give you a shout out from New Caney Texas!
    Just wanted to say keep up the great work!

  68. No matter if some one searches for his essential thing, so he/she needs to
    be available that in detail, therefore that thing is maintained over here.

  69. What’s up to every , because I am really keen of reading this blog’s
    post to be updated on a regular basis. It carries good information.

  70. I was more than happy to uncover this great site. I want to
    to thank you for ones time for this wonderful read!! I definitely savored
    every part of it and I have you saved as a favorite to check out new things on your web site.

  71. Good day! Do you use Twitter? I’d like to follow you if
    that would be ok. I’m absolutely enjoying your blog and look forward to new updates.

  72. This is a topic that is near to my heart… Take care!

    Where are your contact details though?

  73. Touche. Great arguments. Keep up the good effort.

  74. Wonderful blog! I found it while searching on Yahoo News.

    Do you have any tips on how to get listed in Yahoo
    News? I’ve been trying for a while but I never seem to get
    there! Cheers

  75. Awesome blog you have here but I was curious if you knew of any discussion boards that cover
    the same topics talked about in this article? I’d really
    love to be a part of community where I can get opinions
    from other knowledgeable individuals that share the same interest.
    If you have any recommendations, please let me know. Appreciate it!

  76. Good day! Do you know if they make any plugins to protect against hackers?
    I’m kinda paranoid about losing everything I’ve worked hard on. Any
    tips?

  77. Hi there everybody, here every one is sharing
    these familiarity, therefore it’s good to read this website,
    and I used to go to see this website daily.

  78. Why people still make use of to read news papers when in this technological world everything is presented on web?

  79. Wow, this post is fastidious, my younger sister is analyzing these kinds of things, thus I am going to convey
    her.

  80. These are in fact enormous ideas in regarding blogging.
    You have touched some good points here. Any way keep up wrinting.

  81. Quality articles is the important to invite the viewers to
    pay a quick visit the web page, that’s what this web page is
    providing.

  82. I do not even understand how I ended up here, however I assumed this
    put up used to be great. I don’t realize who you are but definitely you are going to
    a famous blogger if you happen to are not already.

    Cheers!

  83. It’s amazing to go to see this web site and reading
    the views of all colleagues on the topic of this
    post, while I am also eager of getting familiarity.

  84. I do agree with all of the ideas you’ve introduced in your post.
    They are very convincing and will certainly work. Still, the posts are very brief for newbies.

    May just you please extend them a little
    from subsequent time? Thank you for the post.

  85. When someone writes an paragraph he/she keeps the plan of a user in his/her mind that how
    a user can be aware of it. So that’s why this post is great.
    Thanks!

  86. It’s very trouble-free to find out any matter on net as compared to textbooks, as I found this paragraph at this site.

  87. Nice blog! Is your theme custom made or did you download it from
    somewhere? A design like yours with a few simple tweeks
    would really make my blog stand out. Please let me know where you
    got your design. Thank you

  88. Appreciate this post. Let me try it out.

  89. There is definately a lot to know about this issue. I like all
    of the points you made.

  90. Nice post. I was checking continuously this
    blog and I’m impressed! Very useful info specifically the last part 🙂 I care for such info a lot.
    I was seeking this certain info for a long time. Thank you and best of luck.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

La Ley 34/2002 nos obliga a avisarte de que usamos cookies propias y de terceros con objetivos estadísticos y de sesión y para mostrarte la 'publi' que nos da de comer. Tranquilo, este mensaje solo sale una vez. Más información

Java desde 0 comunica a los usuarios, a través de este aviso, que puede utilizar cookies cuando el usuario navega por las diferentes pantallas y páginas del sitio. Durante el uso de nuestra página Web usted acepta y autoriza expresamente el uso de cookies, de acuerdo con nuestra Política de Privacidad. Este sitio web utiliza las siguientes cookies propias: - Cookies de sesión, para garantizar que los usuarios que escriban comentarios en el blog sean humanos y no aplicaciones automatizadas. De esta forma se combate el spam. Este sitio web utiliza las siguientes cookies de terceros: - Google AdManager y AdSense: Utiliza cookies para mejorar la publicidad. Entre otros fines, suelen utilizarse para segmentarla según el contenido que sea relevante para los usuarios o su ubicación, mejorar los informes de rendimiento de las campañas y evitar mostrar anuncios que los usuarios ya hayan visto. Las cookies no contienen información personal identificable. Consulta cómo utiliza Google la información de sitios web o aplicaciones. y cómo bloquear determinados anuncios. - Google Analytics: Almacena cookies para poder elaborar estadísticas sobre el tráfico y volumen de visitas de esta web. Al utilizar este sitio web está consintiendo el tratamiento de información acerca de usted por Google. Por tanto, el ejercicio de cualquier derecho en este sentido deberá hacerlo comunicando directamente con Google. - Redes sociales: Cada red social utiliza sus propias cookies para que usted pueda pinchar en botones del tipo Me gusta o Compartir.

Cerrar