{"id":851,"date":"2020-04-20T09:34:08","date_gmt":"2020-04-20T12:34:08","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=851"},"modified":"2020-04-20T09:37:17","modified_gmt":"2020-04-20T12:37:17","slug":"javalin-3-3","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-3\/","title":{"rendered":"Javalin 3 #3"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-3\/#WsBefore\" >#WsBefore<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-3\/#WsEndpoint\" >#WsEndpoint<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-3\/#WsAfter\" >#WsAfter<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/micheladrianomedeiros.com.br\/blog\/javalin-3-3\/#WsContext\" >#WsContext<\/a><\/li><\/ul><\/nav><\/div>\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"WsBefore\"><\/span><strong>#WsBefore<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">O app.wsBefore adiciona um handler que executa antes de um WebSocket handler. Voc\u00ea pode ter v\u00e1rios before-handlers como um WebSocket endpoint, e todos os eventos s\u00e3o 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\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\">wsBefore<\/span><span class=\"o\">(<\/span><span class=\"n\">ws<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ runs before all WebSocket requests<\/span>\n<span class=\"o\">});<\/span>\n<span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">wsBefore<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/path\/*\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ws<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ runs before websocket requests 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=\"nf\">wsBefore<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ws<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ runs before all WebSocket requests<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">wsBefore<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/path\/*\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ws<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ runs before websocket requests to \/path\/*<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"WsEndpoint\"><\/span><strong>#WsEndpoint<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Um WebSocket endpoint \u00e9 declarado com app.ws(path, handler). WebSocket handlers requerem um \u00fanico paths.<\/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\">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=\"n\">ws<\/span><span class=\"o\">.<\/span><span class=\"na\">onMessage<\/span><span class=\"o\">(<\/span><span class=\"n\">ctx<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n        <span class=\"nc\">User<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">message<\/span><span class=\"o\">(<\/span><span class=\"nc\">User<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ convert from json<\/span>\n        <span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">send<\/span><span class=\"o\">(<\/span><span class=\"n\">user<\/span><span class=\"o\">);<\/span> <span class=\"c1\">\/\/ convert to json and send back<\/span>\n    <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=\"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\">\"Message\"<\/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=\"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\">\"Closed\"<\/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=\"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\">\"Errored\"<\/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=\"n\">ws<\/span><span class=\"p\">.<\/span><span class=\"nf\">onMessage<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ctx<\/span> <span class=\"p\">-&gt;<\/span>\n        <span class=\"kd\">val<\/span> <span class=\"py\">user<\/span> <span class=\"p\">=<\/span> <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"n\">message<\/span><span class=\"p\">&lt;<\/span><span class=\"nc\">User<\/span><span class=\"p\">&gt;();<\/span> <span class=\"c1\">\/\/ convert from json<\/span>\n        <span class=\"n\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">send<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">);<\/span> <span class=\"c1\">\/\/ convert to json and send back<\/span>\n    <span class=\"p\">}<\/span>\n    <span class=\"n\">ws<\/span><span class=\"p\">.<\/span><span class=\"nf\">onBinaryMessage<\/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\">\"Message\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">}<\/span>\n    <span class=\"n\">ws<\/span><span class=\"p\">.<\/span><span class=\"nf\">onClose<\/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\">\"Closed\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">}<\/span>\n    <span class=\"n\">ws<\/span><span class=\"p\">.<\/span><span class=\"nf\">onError<\/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\">\"Errored\"<\/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<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"WsAfter\"><\/span><strong>#WsAfter<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">O app.wsAfter adiciona um handler que executa depois de um WebSocket handler. Voc\u00ea pode ter v\u00e1rios after-handlers como um WebSocket endpoint, e todos os eventos s\u00e3o 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=\"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\">wsAfter<\/span><span class=\"o\">(<\/span><span class=\"n\">ws<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ runs after all WebSocket requests<\/span>\n<span class=\"o\">});<\/span>\n<span class=\"n\">app<\/span><span class=\"o\">.<\/span><span class=\"na\">wsAfter<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/path\/*\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">ws<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"o\">{<\/span>\n    <span class=\"c1\">\/\/ runs after websocket requests 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=\"nf\">wsAfter<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ws<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ runs after all WebSocket requests<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">wsAfter<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/path\/:path\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"n\">ws<\/span> <span class=\"p\">-&gt;<\/span>\n    <span class=\"c1\">\/\/ runs after websocket requests to \/path\/*<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre><\/div>    <\/div>\n  <\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"WsContext\"><\/span><strong>#WsContext<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">O objeto wsContext fornece para voc\u00ea tudo o que voc\u00ea precisa para manipular um websocket-request. Ele cont\u00e9m o b\u00e1sico do websocket session e servlet-request, e m\u00e9todos convenientes para mandar mensagens para o cliente.<\/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\">matchedPath<\/span><span class=\"o\">()<\/span>            <span class=\"c1\">\/\/ get the path used to match this request, ex \"\/path\/:param\"<\/span>\n\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">send<\/span><span class=\"o\">(<\/span><span class=\"n\">object<\/span><span class=\"o\">)<\/span>             <span class=\"c1\">\/\/ send an object as JSON (string message)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">send<\/span><span class=\"o\">(<\/span><span class=\"n\">string<\/span><span class=\"o\">)<\/span>             <span class=\"c1\">\/\/ send a string message<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">send<\/span><span class=\"o\">(<\/span><span class=\"n\">byteBuffer<\/span><span class=\"o\">)<\/span>         <span class=\"c1\">\/\/ send a bytebuffer message<\/span>\n\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryString<\/span><span class=\"o\">()<\/span>            <span class=\"c1\">\/\/ get the query string<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">queryParamMap<\/span><span class=\"o\">()<\/span>          <span class=\"c1\">\/\/ get a map of the query parameters<\/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 by key<\/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 by key<\/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\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\">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\">parameter<\/span> <span class=\"n\">as<\/span> <span class=\"kd\">class<\/span>\n\n<span class=\"nc\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">host<\/span><span class=\"o\">()<\/span>                   <span class=\"c1\">\/\/ get the host<\/span>\n\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">header<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/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 a map of the request headers<\/span>\n\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">cookie<\/span><span class=\"o\">(<\/span><span class=\"n\">key<\/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 a map of all request cookies<\/span>\n\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=\"n\">value<\/span><span class=\"o\">)<\/span>    <span class=\"c1\">\/\/ set request attribute<\/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 a map of request attributes<\/span>\n\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 request session attribute (from when WebSocket upgrade was performed)<\/span>\n<span class=\"n\">ctx<\/span><span class=\"o\">.<\/span><span class=\"na\">sessionAttributeMap<\/span><span class=\"o\">()<\/span>    <span class=\"c1\">\/\/ get a map of session attributes (from when WebSocket upgrade was performed)<\/span>\n<\/code><\/pre><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Fonte: <a href=\"https:\/\/javalin.io\/documentation#wscontext\">https:\/\/javalin.io\/documentation#wscontext<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>#WsBefore O app.wsBefore adiciona um handler que executa antes de um WebSocket handler. Voc\u00ea pode ter v\u00e1rios before-handlers como um WebSocket endpoint, e todos os eventos s\u00e3o suportados. Java Kotlin app.wsBefore(ws -&gt; { \/\/ runs before all WebSocket requests }); app.wsBefore(&#8220;\/path\/*&#8221;, ws -&gt; { \/\/ runs before websocket requests to \/path\/* }); app.wsBefore { ws [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":618,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[57,58],"tags":[],"class_list":["post-851","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-framework","category-javalin"],"_links":{"self":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/851","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=851"}],"version-history":[{"count":2,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/851\/revisions"}],"predecessor-version":[{"id":855,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/851\/revisions\/855"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/618"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}