{"id":616,"date":"2019-12-03T09:45:16","date_gmt":"2019-12-03T12:45:16","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=616"},"modified":"2019-12-03T09:45:17","modified_gmt":"2019-12-03T12:45:17","slug":"javalin-3-2","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/","title":{"rendered":"Javalin 3 #2"},"content":{"rendered":"\n<p><strong>Cookie Store<\/strong><\/p>\n\n\n\n<p>A fun\u00e7\u00e3o ctx.cookieStore() fornece um conveniente caminho para compartilhar informa\u00e7\u00f5es entre handlers, request ou at\u00e9 mesmo servidores:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"n\">value<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ store any type of value<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ read any type of value<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">clearCookieStore<\/span><span class=\"o\">();<\/span> <span class=\"c1\">\/\/ clear the cookie-store<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p>O cookieStore funciona desta maneira:<\/p>\n\n\n\n<p>1. O primeiro handler que combina\na entrada do request que ir\u00e1 popular o cookie-store-map com dados guardados no\ncookie (caso exista).<\/p>\n\n\n\n<p>2. Este map pode agora ser\nutilizado como um estado entre handlers no mesmo ciclo de request, bastante parecido\ncom o ctx.attribute().<\/p>\n\n\n\n<p>3. No fim do ciclo do request,\no cookie-store-map \u00e9 serializado, base64-encoded e escrito no response como um\ncookie. Isto permite voc\u00ea dividir o map entre requests e servers (no caso voc\u00ea\nest\u00e1 executando m\u00faltiplos servidores por tr\u00e1s de um load-balancer)<\/p>\n\n\n\n<p><strong>Exemplo:<\/strong><\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"multitab-code\" data-tab=\"1\">\n<ul>\n    <li data-tab=\"1\">Java<\/li>\n    <li data-tab=\"2\">Kotlin<\/li>\n<\/ul>\n<div data-tab=\"1\">\n    <div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">serverOneApp<\/span><span class=\"o\">.<\/span><span class=\"na\">post<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/cookie-storer\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"string\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Hello world!\"<\/span><span class=\"o\">);<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"i\"<\/span><span class=\"o\">,<\/span> <span class=\"mi\">42<\/span><span class=\"o\">);<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"list\"<\/span><span class=\"o\">,<\/span> <span class=\"nc\">Arrays<\/span><span class=\"o\">.<\/span><span class=\"na\">asList<\/span><span class=\"o\">(<\/span><span class=\"s\">\"One\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Two\"<\/span><span class=\"o\">,<\/span> <span class=\"s\">\"Three\"<\/span><span class=\"o\">));<\/span>\n<span class=\"o\">}<\/span>\n<span class=\"n\">serverTwoApp<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/cookie-reader\"<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"c1\">\/\/ runs on a different server than serverOneApp<\/span>\n    <span class=\"nc\">String<\/span> <span class=\"n\">string<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"string\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kt\">int<\/span> <span class=\"n\">i<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"i\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">list<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieStore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"list\"<\/span><span class=\"o\">)<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<div data-tab=\"2\">\n    <div class=\"language-kotlin highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">serverOneApp<\/span><span class=\"p\">.<\/span><span class=\"nf\">post<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/cookie-storer\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">cookieStore<\/span><span class=\"p\">(<\/span><span class=\"s\">\"string\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Hello world!\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">cookieStore<\/span><span class=\"p\">(<\/span><span class=\"s\">\"i\"<\/span><span class=\"p\">,<\/span> <span class=\"m\">42<\/span><span class=\"p\">)<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">cookieStore<\/span><span class=\"p\">(<\/span><span class=\"s\">\"list\"<\/span><span class=\"p\">,<\/span> <span class=\"nf\">listOf<\/span><span class=\"p\">(<\/span><span class=\"s\">\"One\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Two\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Three\"<\/span><span class=\"p\">))<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"n\">serverTwoApp<\/span><span class=\"p\">.<\/span><span class=\"k\">get<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/cookie-reader\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span> <span class=\"c1\">\/\/ runs on a different server than serverOneApp<\/span>\n    <span class=\"kd\">val<\/span> <span class=\"py\">string<\/span> <span class=\"p\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">cookieStore<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"p\">&gt;(<\/span><span class=\"s\">\"string\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"kd\">val<\/span> <span class=\"py\">i<\/span> <span class=\"p\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">cookieStore<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">Int<\/span><span class=\"p\">&gt;(<\/span><span class=\"s\">\"i\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"kd\">val<\/span> <span class=\"py\">list<\/span> <span class=\"p\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">cookieStore<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">List<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"p\">&gt;&gt;(<\/span><span class=\"s\">\"list\"<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p>Desde que o cliente guarda o\ncookie, o get request para o serverTwoApp ir\u00e1 ser capaz de recuperar as informa\u00e7\u00f5es\nque foram passadas via post para serverOneApp.<\/p>\n\n\n\n<p>Lembre-se que os cookies t\u00eam no m\u00e1ximo 4kb.<\/p>\n\n\n\n<p><strong>Context extensions<\/strong><\/p>\n\n\n\n<p>Context extensions fornece\npara o desenvolvedor Java uma maneira de estender o objeto Context.<\/p>\n\n\n\n<p>Um dos mais populares recursos\ndo Kotlin \u00e9 a extension functions. Quando trabalhar com um objeto que n\u00e3o seja\nJava, voc\u00ea muitas vezes termina fazendo MyUtil.action(object, &#8230;).<\/p>\n\n\n\n<p>Se voc\u00ea, por exemplo, quiser serializar um objeto e configurar o resultado no Context, voc\u00ea pode fazer:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nc\">MyMapperUtil<\/span><span class=\"o\">.<\/span><span class=\"na\">serialize<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span><span class=\"o\">,<\/span> <span class=\"n\">myMapper<\/span><span class=\"o\">,<\/span> <span class=\"n\">myObject<\/span><span class=\"o\">));<\/span> <span class=\"c1\">\/\/ three args, what happens where?<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p>Com context extensions voc\u00ea pode adicionar extens\u00f5es no context:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">use<\/span><span class=\"o\">(<\/span><span class=\"nc\">MyMapper<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">).<\/span><span class=\"na\">serialize<\/span><span class=\"o\">(<\/span><span class=\"n\">object<\/span><span class=\"o\">));<\/span> <span class=\"c1\">\/\/ use MyMapper to serialize object<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p>Context extensions deve ser adicionado antes de ser utilizado, isto pode tipicamente ser feito primeiro (before) no filtro do seu app:<\/p>\n\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">before<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">register<\/span><span class=\"o\">(<\/span><span class=\"nc\">MyMapper<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">MyMapper<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span><span class=\"o\">,<\/span> <span class=\"n\">otherDependency<\/span><span class=\"o\">));<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p><strong>WebSockets<\/strong> <\/p>\n\n\n\n<p>Javalin \u00e9 muito intuitivo para utilizar o WebSockets. Voc\u00ea declara um endpoint com um caminho e configura um diferente event handlers no lambda:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"multitab-code\" data-tab=\"1\">\n<ul>\n    <li data-tab=\"1\">Java<\/li>\n    <li data-tab=\"2\">Kotlin<\/li>\n<\/ul>\n<div data-tab=\"1\">\n    <div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">ws<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/websocket\/:path\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ws<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onConnect<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nc\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Connected\"<\/span><span class=\"o\">));<\/span>\n<span class=\"o\">});<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<div data-tab=\"2\">\n    <div class=\"language-kotlin highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">ws<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/websocket\/:path\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ws<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"n\">ws<\/span><span class=\"p\">.<\/span><span class=\"nf\">onConnect<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span> <span class=\"nf\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Connected\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p>H\u00e1 no total cinco eventos suportados:<\/p>\n\n\n\n<link rel=\"stylesheet\" href=\"https:\/\/javalin.io\/css\/main.css\">\n<script src=\"https:\/\/javalin.io\/js\/scripts.js\"><\/script>\n   \n <style>\/* Styles that affect the length of the document *\/\np code,\nli code {\n    font-size: 90%;\n    letter-spacing: -0.5px;\n    border: 1px solid #ccc;\n    padding: 1px 3px;\n}\n\n.multitab-code pre {\n    margin-top: 0;\n    border-radius: 0 0 5px 5px;\n}\n\n.multitab-code div[data-tab] {\n    display: none;\n}\n<\/style>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onConnect<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsConnectContext<\/span><span class=\"o\">)<\/span>\n<span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onError<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsErrorContext<\/span><span class=\"o\">)<\/span>\n<span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onClose<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsCloseContext<\/span><span class=\"o\">)<\/span>\n<span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onMessage<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsMessageContext<\/span><span class=\"o\">)<\/span>\n<span class=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onBinaryMessage<\/span><span class=\"o\">(<\/span><span class=\"nc\">WsBinaryMessageContext<\/span><span class=\"o\">)<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p>Os diferentes sabores de WsContext exp\u00f5e diferentes coisas, como por exemplo, WsMessageContext tem o m\u00e9todo .message() o qual d\u00e1 a mensagem que o cliente mandou. As diferen\u00e7as entre os diferentes contexts \u00e9 pequena.<\/p>\n\n\n\n<p>Fonte:  <a href=\"https:\/\/javalin.io\/documentation\">https:\/\/javalin.io\/documentation<\/a> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cookie Store A fun\u00e7\u00e3o ctx.cookieStore() fornece um conveniente caminho para compartilhar informa\u00e7\u00f5es entre handlers, request ou at\u00e9 mesmo servidores: ctx.cookieStore(key, value); \/\/ store any type of value ctx.cookieStore(key); \/\/ read any type of value ctx.clearCookieStore(); \/\/ clear the cookie-store O cookieStore funciona desta maneira: 1. O primeiro handler que combina a entrada do request que [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":280,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57,58],"tags":[],"class_list":["post-616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-framework","category-javalin"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.5 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Javalin 3 #2 - Viciados em Aprender<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Javalin 3 #2\" \/>\n<meta property=\"og:description\" content=\"Cookie Store A fun\u00e7\u00e3o ctx.cookieStore() fornece um conveniente caminho para compartilhar informa\u00e7\u00f5es entre handlers, request ou at\u00e9 mesmo servidores: ctx.cookieStore(key, value); \/\/ store any type of value ctx.cookieStore(key); \/\/ read any type of value ctx.clearCookieStore(); \/\/ clear the cookie-store O cookieStore funciona desta maneira: 1. O primeiro handler que combina a entrada do request que [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Viciados em Aprender\" \/>\n<meta property=\"article:published_time\" content=\"2019-12-03T12:45:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-12-03T12:45:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-1-e1575377075325.png\" \/>\n\t<meta property=\"og:image:width\" content=\"296\" \/>\n\t<meta property=\"og:image:height\" content=\"86\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"blackzig\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"blackzig\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/\"},\"author\":{\"name\":\"blackzig\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"headline\":\"Javalin 3 #2\",\"datePublished\":\"2019-12-03T12:45:16+00:00\",\"dateModified\":\"2019-12-03T12:45:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/\"},\"wordCount\":317,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"image\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/javalin-1-e1575377075325.png\",\"articleSection\":[\"Framework\",\"Javalin\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/\",\"name\":\"Javalin 3 #2 - Viciados em Aprender\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/javalin-1-e1575377075325.png\",\"datePublished\":\"2019-12-03T12:45:16+00:00\",\"dateModified\":\"2019-12-03T12:45:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/javalin-1-e1575377075325.png\",\"contentUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/javalin-1-e1575377075325.png\",\"width\":296,\"height\":86},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Javalin 3 #2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/\",\"name\":\"Viciados em Aprender\",\"description\":\"Queremos aprender tudo o que for poss\u00edvel nesta vida.\",\"publisher\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\",\"name\":\"blackzig\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg\",\"contentUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg\",\"width\":1920,\"height\":1080,\"caption\":\"blackzig\"},\"logo\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.micheladrianomedeiros.com.br\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Javalin 3 #2 - Viciados em Aprender","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/","og_locale":"pt_PT","og_type":"article","og_title":"Javalin 3 #2","og_description":"Cookie Store A fun\u00e7\u00e3o ctx.cookieStore() fornece um conveniente caminho para compartilhar informa\u00e7\u00f5es entre handlers, request ou at\u00e9 mesmo servidores: ctx.cookieStore(key, value); \/\/ store any type of value ctx.cookieStore(key); \/\/ read any type of value ctx.clearCookieStore(); \/\/ clear the cookie-store O cookieStore funciona desta maneira: 1. O primeiro handler que combina a entrada do request que [&hellip;]","og_url":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/","og_site_name":"Viciados em Aprender","article_published_time":"2019-12-03T12:45:16+00:00","article_modified_time":"2019-12-03T12:45:17+00:00","og_image":[{"width":296,"height":86,"url":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-1-e1575377075325.png","type":"image\/png"}],"author":"blackzig","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"blackzig","Tempo estimado de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/#article","isPartOf":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/"},"author":{"name":"blackzig","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"headline":"Javalin 3 #2","datePublished":"2019-12-03T12:45:16+00:00","dateModified":"2019-12-03T12:45:17+00:00","mainEntityOfPage":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/"},"wordCount":317,"commentCount":0,"publisher":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"image":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/#primaryimage"},"thumbnailUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-1-e1575377075325.png","articleSection":["Framework","Javalin"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/","name":"Javalin 3 #2 - Viciados em Aprender","isPartOf":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/#primaryimage"},"image":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/#primaryimage"},"thumbnailUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-1-e1575377075325.png","datePublished":"2019-12-03T12:45:16+00:00","dateModified":"2019-12-03T12:45:17+00:00","breadcrumb":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/#primaryimage","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-1-e1575377075325.png","contentUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-1-e1575377075325.png","width":296,"height":86},{"@type":"BreadcrumbList","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/micheladrianomedeiros.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Javalin 3 #2"}]},{"@type":"WebSite","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#website","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/","name":"Viciados em Aprender","description":"Queremos aprender tudo o que for poss\u00edvel nesta vida.","publisher":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/micheladrianomedeiros.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":["Person","Organization"],"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e","name":"blackzig","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2025\/07\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2025\/07\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg","contentUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2025\/07\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg","width":1920,"height":1080,"caption":"blackzig"},"logo":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2025\/07\/a7e4b18a2d7254b5cf6da7ca7f92dc71da86905bd1de486e98e3a98664e058f2.jpg"},"sameAs":["http:\/\/www.micheladrianomedeiros.com.br\/"]}]}},"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/616","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/comments?post=616"}],"version-history":[{"count":2,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/616\/revisions"}],"predecessor-version":[{"id":852,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/616\/revisions\/852"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/280"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}