{"id":278,"date":"2019-07-20T14:04:18","date_gmt":"2019-07-20T14:04:18","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=278"},"modified":"2019-11-11T16:01:29","modified_gmt":"2019-11-11T19:01:29","slug":"javalin-3","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/","title":{"rendered":"Javalin 3 #1"},"content":{"rendered":"\n<p>Javalin \u00e9 um simples web\nframework para Java e Kotlin.<\/p>\n\n\n\n<p>Criei um projeto de aplica\u00e7\u00e3o\nJava com Maven, e vou adicionar a depend\u00eancia do Javalin e do slf4j-simple no\npom.xml.<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; &lt;dependencies&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;dependency&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;groupId&gt;io.javalin&lt;\/groupId&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;artifactId&gt;javalin&lt;\/artifactId&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;version&gt;3.1.0&lt;\/version&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;\/dependency&gt;&nbsp;&nbsp;&nbsp;&nbsp; <\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;dependency&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;groupId&gt;org.slf4j&lt;\/groupId&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;artifactId&gt;slf4j-simple&lt;\/artifactId&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n&lt;version&gt;1.7.26&lt;\/version&gt;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/dependency&gt;&nbsp; <\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; &lt;\/dependencies&gt;<\/p>\n\n\n\n<p>Na classe principal vou\nadicionar os seguintes comandos:<\/p>\n\n\n\n<p>public class Start {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; public static\nvoid main(String[] args) {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Javalin\napp = Javalin.create().start(7000);<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\napp.get(&#8220;\/&#8221;, ctx -&gt; ctx.result(&#8220;Hello World&#8221;));<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>Agora execute, se de tudo\ncerto voc\u00ea vai aparecer algo assim:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"855\" height=\"366\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin.png\" alt=\"\" class=\"wp-image-279\" srcset=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin.png 855w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-300x128.png 300w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-768x329.png 768w\" sizes=\"auto, (max-width: 855px) 100vw, 855px\" \/><\/figure><\/div>\n\n\n\n<p>Se voc\u00ea acessar o <a href=\"http:\/\/localhost:7000\/\">http:\/\/localhost:7000\/<\/a> vai\nver a mensagem Hello World.<\/p>\n\n\n\n<p class=\"has-text-color has-vivid-cyan-blue-color\"><strong>Manipuladores (Handlers)<\/strong><\/p>\n\n\n\n<p>Javalin tem tr\u00eas tipos de manipuladores: before-handlers,\nendpoint-handlers e after-handlers. (H\u00e1 temb\u00e9m o exception-handlers\ne error-handlers, iremos v\u00ea-los depois). O before-, endpoint- e o after-handlers\ns\u00e3o formados por tr\u00eas partes:<\/p>\n\n\n\n<p>Um verbo: exemplo, before, get, post, put, delete,\nafter<\/p>\n\n\n\n<p>Um destino: exemplo, \/,\n\/hello-world<\/p>\n\n\n\n<p>Uma implementa\u00e7\u00e3o de\nmanipulador: ctx -&gt; {&#8230;}<\/p>\n\n\n\n<p>A interface Handler tem o\nretorno do tipo void. Voc\u00ea utiliza ctx.result() para configurar a resposta que retornar\u00e1\npara o usu\u00e1rio.<\/p>\n\n\n\n<p class=\"has-text-color has-vivid-cyan-blue-color\"><strong>Before Handlers<\/strong><\/p>\n\n\n\n<p>Before-handlers s\u00e3o utilizados\nantes de qualquer request (incluindo arquivos est\u00e1ticos, se voc\u00ea habilitar isto).<\/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=\"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\">before<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ runs before all requests<\/span>\n<span class=\"o\">});<\/span>\n<span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">before<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/path\/*\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ runs before request to \/path\/*<\/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=\"n\">before<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ runs before all requests\n<\/span><span class=\"p\">}<\/span>\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">before<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/path\/*\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ runs before request to \/path\/*\n<\/span><span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"has-text-color has-vivid-cyan-blue-color\"><strong>Endpoint Handlers<\/strong><\/p>\n\n\n\n<p>Endpoint-handlers s\u00e3o utilizados\nna ordem que foram definidos.<\/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<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=\"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\">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=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ some code<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">json<\/span><span class=\"o\">(<\/span><span class=\"n\">object<\/span><span class=\"o\">);<\/span>\n<span class=\"o\">});<\/span>\n\n<span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">post<\/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=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ some code<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">status<\/span><span class=\"o\">(<\/span><span class=\"mi\">201<\/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=\"k\">get<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ some code\n<\/span>    <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">json<\/span><span class=\"p\">(<\/span><span class=\"k\">object<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">post<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ some code\n<\/span>    <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">status<\/span><span class=\"p\">(<\/span><span class=\"m\">201<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p>Destinos do Handler podem\nincluir par\u00e2metros. Eles s\u00e3o passados via ctx.pathParam(\u201ckey\u201d):<\/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\">get<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/hello\/:name\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">result<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Hello: \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">pathParam<\/span><span class=\"o\">(<\/span><span class=\"s\">\"name\"<\/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=\"k\">get<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/hello\/:name\"<\/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=\"n\">result<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Hello: \"<\/span> <span class=\"p\">+<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">pathParam<\/span><span class=\"p\">(<\/span><span class=\"s\">\"name\"<\/span><span class=\"p\">))<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p>Destinos do Handler aceitam como\npar\u00e2metros wildcard, que s\u00e3o chamados de path-parameters:<\/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=\"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\">get<\/span><span class=\"o\">(<\/span><span class=\"err\">\"<\/span><span class=\"o\">\/<\/span><span class=\"n\">hello<\/span><span class=\"o\">\/*,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ capture all request to sub-paths of \/hello\/<\/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=\"k\">get<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/hello\/*\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ capture all request to sub-paths of \/hello\/\n<\/span><span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"has-text-color has-vivid-cyan-blue-color\"><strong>After Handlers<\/strong><\/p>\n\n\n\n<p>After-handlers executam depois\nde cada request (mesmo que ocorra uma exce\u00e7\u00e3o)<\/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\">after<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ run after all requests<\/span>\n<span class=\"o\">});<\/span>\n<span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">after<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/path\/*\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ runs after request to \/path\/*<\/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=\"n\">after<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ run after all requests\n<\/span><span class=\"p\">}<\/span>\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">after<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/path\/*\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ runs after request to \/path\/*\n<\/span><span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<p class=\"has-text-color has-vivid-cyan-blue-color\"><strong>Contex<\/strong><\/p>\n\n\n\n<p>O objeto Context fornece tudo que voc\u00ea precisa para a manipula\u00e7\u00e3o de um http-request. Ele cont\u00e9m o servlet-request e o servlet-response, e um grupo de getters e setters. Os getters operam na maioria das vezes no request-object, enquanto os setters operam exclusivamente no response object.<\/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<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\">appAttribute<\/span><span class=\"o\">(<\/span><span class=\"kd\">class<\/span><span class=\"err\">)<\/span>                 <span class=\"err\">\/\/<\/span> <span class=\"nc\">get<\/span> <span class=\"n\">an<\/span> <span class=\"n\">attribute<\/span> <span class=\"n\">set<\/span> <span class=\"n\">on<\/span> <span class=\"n\">the<\/span> <span class=\"n\">app<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">register<\/span><span class=\"o\">(<\/span><span class=\"kd\">class<\/span><span class=\"err\">,<\/span> <span class=\"nc\">object<\/span><span class=\"o\">)<\/span>             <span class=\"c1\">\/\/ register an extension on the context<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">use<\/span><span class=\"o\">(<\/span><span class=\"kd\">class<\/span><span class=\"err\">)<\/span>                          <span class=\"err\">\/\/<\/span> <span class=\"nc\">use<\/span> <span class=\"n\">an<\/span> <span class=\"n\">extension<\/span> <span class=\"n\">on<\/span> <span class=\"n\">the<\/span> <span class=\"n\">context<\/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\">\/\/ get cookie store 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=\"n\">value<\/span><span class=\"o\">)<\/span>             <span class=\"c1\">\/\/ set a cookie store 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<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">matchedPath<\/span><span class=\"o\">()<\/span>                       <span class=\"c1\">\/\/ path that was used to match request (also includes before\/after paths)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">endpointHandlerPath<\/span><span class=\"o\">()<\/span>               <span class=\"c1\">\/\/ endpoint path that was used to match request (null in before, available in after)<\/span>\n\n<span class=\"c1\">\/\/ Request methods<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">body<\/span><span class=\"o\">()<\/span>                              <span class=\"c1\">\/\/ get body as string<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">bodyAsBytes<\/span><span class=\"o\">()<\/span>                       <span class=\"c1\">\/\/ get body as bytes<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">bodyAsClass<\/span><span class=\"o\">(<\/span><span class=\"kd\">class<\/span><span class=\"err\">)<\/span>                  <span class=\"err\">\/\/<\/span> <span class=\"nc\">get<\/span> <span class=\"n\">body<\/span> <span class=\"n\">as<\/span> <span class=\"kd\">class<\/span>\n<span class=\"nc\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">bodyValidator<\/span><span class=\"o\">(<\/span><span class=\"kd\">class<\/span><span class=\"err\">)<\/span>                <span class=\"err\">\/\/<\/span> <span class=\"nc\">get<\/span> <span class=\"n\">typed<\/span> <span class=\"n\">validator<\/span> <span class=\"k\">for<\/span> <span class=\"n\">body<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">uploadedFile<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">)<\/span>                  <span class=\"c1\">\/\/ get uploaded file by name<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">uploadedFiles<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">)<\/span>                 <span class=\"c1\">\/\/ get uploaded file(s) by name<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">formParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">)<\/span>                      <span class=\"c1\">\/\/ get form parameter<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">formParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"k\">default<\/span><span class=\"o\">)<\/span>             <span class=\"c1\">\/\/ get form parameter (or default value)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">formParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"kd\">class<\/span><span class=\"err\">)<\/span>               <span class=\"err\">\/\/<\/span> <span class=\"nc\">get<\/span> <span class=\"n\">form<\/span> <span class=\"n\">parameter<\/span> <span class=\"n\">as<\/span> <span class=\"kd\">class<\/span>\n<span class=\"nc\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">formParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"kd\">class<\/span><span class=\"err\">,<\/span> <span class=\"nc\">default<\/span><span class=\"o\">)<\/span>      <span class=\"c1\">\/\/ get form parameter (or default value) as class<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">formParams<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">)<\/span>                     <span class=\"c1\">\/\/ get form parameters (multiple)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">formParamMap<\/span><span class=\"o\">()<\/span>                      <span class=\"c1\">\/\/ get form parameter map<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">pathParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">)<\/span>                      <span class=\"c1\">\/\/ get path parameter<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">pathParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"kd\">class<\/span><span class=\"err\">)<\/span>               <span class=\"err\">\/\/<\/span> <span class=\"nc\">get<\/span> <span class=\"n\">path<\/span> <span class=\"n\">as<\/span> <span class=\"kd\">class<\/span>\n<span class=\"nc\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">pathParamMap<\/span><span class=\"o\">()<\/span>                      <span class=\"c1\">\/\/ get path parameter map<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">basicAuthCredentials<\/span><span class=\"o\">()<\/span>              <span class=\"c1\">\/\/ get basic auth credentials (username\/pwd)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">attribute<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">)<\/span>                      <span class=\"c1\">\/\/ get request attribute<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">attributeMap<\/span><span class=\"o\">()<\/span>                      <span class=\"c1\">\/\/ get request attribute map<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">contentLength<\/span><span class=\"o\">()<\/span>                     <span class=\"c1\">\/\/ get request content length<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">contentType<\/span><span class=\"o\">()<\/span>                       <span class=\"c1\">\/\/ get request content type<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookie<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">)<\/span>                        <span class=\"c1\">\/\/ get request cookie<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookieMap<\/span><span class=\"o\">()<\/span>                         <span class=\"c1\">\/\/ get request cookie map<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">header<\/span><span class=\"o\">(<\/span><span class=\"n\">header<\/span><span class=\"o\">)<\/span>                      <span class=\"c1\">\/\/ get request header<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">headerMap<\/span><span class=\"o\">()<\/span>                         <span class=\"c1\">\/\/ get request header map<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">host<\/span><span class=\"o\">()<\/span>                              <span class=\"c1\">\/\/ get request host<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">ip<\/span><span class=\"o\">()<\/span>                                <span class=\"c1\">\/\/ get request host<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">isMultipart<\/span><span class=\"o\">()<\/span>                       <span class=\"c1\">\/\/ check if request is multipart<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">isMultipartFormData<\/span><span class=\"o\">()<\/span>               <span class=\"c1\">\/\/ check if request is multipart\/form data<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">method<\/span><span class=\"o\">()<\/span>                            <span class=\"c1\">\/\/ get request method<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">path<\/span><span class=\"o\">()<\/span>                              <span class=\"c1\">\/\/ get request path<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">port<\/span><span class=\"o\">()<\/span>                              <span class=\"c1\">\/\/ get request port<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">protocol<\/span><span class=\"o\">()<\/span>                          <span class=\"c1\">\/\/ get request protocol<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">)<\/span>                     <span class=\"c1\">\/\/ get query parameter<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"k\">default<\/span><span class=\"o\">)<\/span>            <span class=\"c1\">\/\/ get query parameter (or default value)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"kd\">class<\/span><span class=\"err\">)<\/span>              <span class=\"err\">\/\/<\/span> <span class=\"nc\">get<\/span> <span class=\"n\">query<\/span> <span class=\"n\">parameter<\/span> <span class=\"n\">as<\/span> <span class=\"kd\">class<\/span>\n<span class=\"nc\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryParam<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">,<\/span> <span class=\"kd\">class<\/span><span class=\"err\">,<\/span> <span class=\"nc\">default<\/span><span class=\"o\">)<\/span>     <span class=\"c1\">\/\/ get query parameter (or default value) as class<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryParams<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">)<\/span>                    <span class=\"c1\">\/\/ get query parameters (multiple)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryParamMap<\/span><span class=\"o\">()<\/span>                     <span class=\"c1\">\/\/ get query parameter map<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryString<\/span><span class=\"o\">()<\/span>                       <span class=\"c1\">\/\/ get query string<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">scheme<\/span><span class=\"o\">()<\/span>                            <span class=\"c1\">\/\/ get request scheme<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">sessionAttribute<\/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\">\/\/ set session attribute (server side attribute)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">sessionAttribute<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/span><span class=\"o\">)<\/span>               <span class=\"c1\">\/\/ get session attribute<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">sessionAttributeMap<\/span><span class=\"o\">()<\/span>               <span class=\"c1\">\/\/ get attribute map<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">url<\/span><span class=\"o\">()<\/span>                               <span class=\"c1\">\/\/ get request url<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">fullUrl<\/span><span class=\"o\">()<\/span>                           <span class=\"c1\">\/\/ get request url + query param<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">contextPath<\/span><span class=\"o\">()<\/span>                       <span class=\"c1\">\/\/ get request context path<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">userAgent<\/span><span class=\"o\">()<\/span>                         <span class=\"c1\">\/\/ get request user agent<\/span>\n\n<span class=\"c1\">\/\/ Response methods<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">result<\/span><span class=\"o\">(<\/span><span class=\"n\">resultString<\/span><span class=\"o\">)<\/span>                <span class=\"c1\">\/\/ set a string result that will be sent to the client<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">resultString<\/span><span class=\"o\">()<\/span>                      <span class=\"c1\">\/\/ get the string result that will be sent to the client<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">result<\/span><span class=\"o\">(<\/span><span class=\"n\">resultStream<\/span><span class=\"o\">)<\/span>                <span class=\"c1\">\/\/ set a stream result that will be sent to the client<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">resultStream<\/span><span class=\"o\">()<\/span>                      <span class=\"c1\">\/\/ get the stream that will be sent to the client<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">result<\/span><span class=\"o\">(<\/span><span class=\"n\">future<\/span><span class=\"o\">)<\/span>                      <span class=\"c1\">\/\/ set a future result that will be sent to the client (async)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">resultFuture<\/span><span class=\"o\">()<\/span>                      <span class=\"c1\">\/\/ get the future result that will be sent to the client<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">contentType<\/span><span class=\"o\">(<\/span><span class=\"n\">contentType<\/span><span class=\"o\">)<\/span>            <span class=\"c1\">\/\/ set the response content type<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">header<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">,<\/span> <span class=\"n\">value<\/span><span class=\"o\">)<\/span>                 <span class=\"c1\">\/\/ set a response header<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">redirect<\/span><span class=\"o\">(<\/span><span class=\"n\">location<\/span><span class=\"o\">)<\/span>                  <span class=\"c1\">\/\/ send a redirect response to location<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">redirect<\/span><span class=\"o\">(<\/span><span class=\"n\">location<\/span><span class=\"o\">,<\/span> <span class=\"n\">httpStatusCode<\/span><span class=\"o\">)<\/span>  <span class=\"c1\">\/\/ send a redirect response to location with status code<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">status<\/span><span class=\"o\">(<\/span><span class=\"n\">statusCode<\/span><span class=\"o\">)<\/span>                  <span class=\"c1\">\/\/ set response status<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">status<\/span><span class=\"o\">()<\/span>                            <span class=\"c1\">\/\/ get response status<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookie<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">,<\/span> <span class=\"n\">value<\/span><span class=\"o\">)<\/span>                 <span class=\"c1\">\/\/ set cookie by name and value<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookie<\/span><span class=\"o\">(<\/span><span class=\"n\">cookie<\/span><span class=\"o\">)<\/span>                      <span class=\"c1\">\/\/ set cookie<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">removeCookie<\/span><span class=\"o\">(<\/span><span class=\"n\">name<\/span><span class=\"o\">,<\/span> <span class=\"n\">path<\/span><span class=\"o\">)<\/span>            <span class=\"c1\">\/\/ remove a cookie<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">html<\/span><span class=\"o\">(<\/span><span class=\"n\">html<\/span><span class=\"o\">)<\/span>                          <span class=\"c1\">\/\/ call result(string).contentType(\"text\/html\")<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">json<\/span><span class=\"o\">(<\/span><span class=\"n\">obj<\/span><span class=\"o\">)<\/span>                           <span class=\"c1\">\/\/ call result(JavalinJson.toJson(obj)).contentType(\"application\/json\")<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">json<\/span><span class=\"o\">(<\/span><span class=\"n\">future<\/span><span class=\"o\">)<\/span>                        <span class=\"c1\">\/\/ call result(future(JavalinJson.toJson(obj))).contentType(\"application\/json\")<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">render<\/span><span class=\"o\">(<\/span><span class=\"n\">filePath<\/span><span class=\"o\">,<\/span> <span class=\"n\">model<\/span><span class=\"o\">)<\/span>             <span class=\"c1\">\/\/ call html(JavalinRenderer.render(filePath, model)<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p><a href=\"https:\/\/javalin.io\/documentation\">https:\/\/javalin.io\/documentation<\/a><\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-vivid-cyan-blue-background-color\">\u2764\ufe0f&nbsp;Curso Java Para Iniciantes&nbsp;&nbsp;<\/p>\n\n\n\n<p>&gt;&gt;&gt;&nbsp;<a href=\"http:\/\/bit.ly\/java-swing\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/bit.ly\/java-swing<\/a>&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"has-text-color has-background has-very-light-gray-color has-vivid-cyan-blue-background-color\">\ud83d\udc4d&nbsp;Curso de Desenvolvimento Web Completo&nbsp;&nbsp;<\/p>\n\n\n\n<p>&gt;&gt;&gt;&nbsp;<a href=\"http:\/\/bit.ly\/2FnB5Sp\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/bit.ly\/2FnB5Sp<\/a>&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>#java&nbsp;&nbsp;#javalin<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Javalin \u00e9 um simples web framework para Java e Kotlin. Criei um projeto de aplica\u00e7\u00e3o Java com Maven, e vou adicionar a depend\u00eancia do Javalin e do slf4j-simple no pom.xml. &nbsp;&nbsp;&nbsp; &lt;dependencies&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;io.javalin&lt;\/groupId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;javalin&lt;\/artifactId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;3.1.0&lt;\/version&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/dependency&gt;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.slf4j&lt;\/groupId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;slf4j-simple&lt;\/artifactId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.7.26&lt;\/version&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/dependency&gt;&nbsp; &nbsp;&nbsp;&nbsp; &lt;\/dependencies&gt; Na [&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":[59],"class_list":["post-278","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-framework","category-javalin","tag-javalin"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.5 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Javalin 3 #1 - 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\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Javalin 3 #1\" \/>\n<meta property=\"og:description\" content=\"Javalin \u00e9 um simples web framework para Java e Kotlin. Criei um projeto de aplica\u00e7\u00e3o Java com Maven, e vou adicionar a depend\u00eancia do Javalin e do slf4j-simple no pom.xml. &nbsp;&nbsp;&nbsp; &lt;dependencies&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;io.javalin&lt;\/groupId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;javalin&lt;\/artifactId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;3.1.0&lt;\/version&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/dependency&gt;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.slf4j&lt;\/groupId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;slf4j-simple&lt;\/artifactId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.7.26&lt;\/version&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/dependency&gt;&nbsp; &nbsp;&nbsp;&nbsp; &lt;\/dependencies&gt; Na [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Viciados em Aprender\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-20T14:04:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-11T19:01:29+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=\"7 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\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/\"},\"author\":{\"name\":\"blackzig\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"headline\":\"Javalin 3 #1\",\"datePublished\":\"2019-07-20T14:04:18+00:00\",\"dateModified\":\"2019-11-11T19:01:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/\"},\"wordCount\":536,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"image\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/javalin-1-e1575377075325.png\",\"keywords\":[\"javalin\"],\"articleSection\":[\"Framework\",\"Javalin\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/\",\"name\":\"Javalin 3 #1 - Viciados em Aprender\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/javalin-1-e1575377075325.png\",\"datePublished\":\"2019-07-20T14:04:18+00:00\",\"dateModified\":\"2019-11-11T19:01:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/javalin-3\\\/#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\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Javalin 3 #1\"}]},{\"@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 #1 - 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\/","og_locale":"pt_PT","og_type":"article","og_title":"Javalin 3 #1","og_description":"Javalin \u00e9 um simples web framework para Java e Kotlin. Criei um projeto de aplica\u00e7\u00e3o Java com Maven, e vou adicionar a depend\u00eancia do Javalin e do slf4j-simple no pom.xml. &nbsp;&nbsp;&nbsp; &lt;dependencies&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;io.javalin&lt;\/groupId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;javalin&lt;\/artifactId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;3.1.0&lt;\/version&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/dependency&gt;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;org.slf4j&lt;\/groupId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;slf4j-simple&lt;\/artifactId&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;1.7.26&lt;\/version&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;\/dependency&gt;&nbsp; &nbsp;&nbsp;&nbsp; &lt;\/dependencies&gt; Na [&hellip;]","og_url":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/","og_site_name":"Viciados em Aprender","article_published_time":"2019-07-20T14:04:18+00:00","article_modified_time":"2019-11-11T19:01:29+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":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/#article","isPartOf":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/"},"author":{"name":"blackzig","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"headline":"Javalin 3 #1","datePublished":"2019-07-20T14:04:18+00:00","dateModified":"2019-11-11T19:01:29+00:00","mainEntityOfPage":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/"},"wordCount":536,"commentCount":0,"publisher":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"image":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/#primaryimage"},"thumbnailUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-1-e1575377075325.png","keywords":["javalin"],"articleSection":["Framework","Javalin"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/","name":"Javalin 3 #1 - Viciados em Aprender","isPartOf":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/#primaryimage"},"image":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/#primaryimage"},"thumbnailUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/07\/javalin-1-e1575377075325.png","datePublished":"2019-07-20T14:04:18+00:00","dateModified":"2019-11-11T19:01:29+00:00","breadcrumb":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3\/#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\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/micheladrianomedeiros.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Javalin 3 #1"}]},{"@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\/278","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=278"}],"version-history":[{"count":3,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/278\/revisions"}],"predecessor-version":[{"id":561,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/278\/revisions\/561"}],"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=278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}