{"componentChunkName":"component---src-templates-blog-post-js","path":"/spring-boot-web/","result":{"data":{"markdownRemark":{"html":"<h1 id=\"Introducao\" style=\"position:relative;\">Introdução<a href=\"#Introducao\" aria-label=\"Introducao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>Nesse artigo iremos criar um servidor HTTP utilizando <strong>Spring Boot</strong> e vamos fazer isso do zero, desde a criação do projeto até a configuração de rotas, verbos HTTP, serialização e desserialização de objetos <strong>JSON</strong>.</p>\n<h1 id=\"O-que-e-o-Spring-Boot\" style=\"position:relative;\">O que é o Spring Boot?<a href=\"#O-que-e-o-Spring-Boot\" aria-label=\"O que e o Spring Boot permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>O <strong>Spring Boot</strong> é um projeto criado pela <strong>Pivotal</strong> com foco em produtividade, eles perceberam que a maior dificuldade para quem estava criando um projeto novo eram as configurações, tanto de dependências de projeto como da linguagem <strong>Java</strong> como um todo, o que deixava tudo muito custoso ou frágil a ponto de uma simples alteração quebrar todo o ecossistema daquela aplicação.</p>\n<p>Com isso em mente foi criado o <strong>Spring Boot</strong> que facilita a criação de aplicações independentes, prontas pra rodar na <strong>Web</strong> pois já vem por padrão com um servidor <strong>Tomcat</strong> embarcado ou qualquer outro servidor que você queira adicionar sem a necessidade de criar arquivos <strong>WAR</strong>, além disso aplicações <strong>Spring Boot</strong> já possuem uma pré-configuração padrão muito bem acabada que atende na maioria dos casos mas caso seja necessário alguma modificação na configuração você não precisará criar arquivos <strong>XML</strong> que era um outro ponto de falha pois eram complicados de fazer e deixavam os sistemas frágeis e suscetíveis a falhas. </p>\n<p>Porém um enorme ganho do <strong>Spring Boot</strong> é o fato de você conseguir adicionar dependências com grande facilidade bastando adicionar a dependência no projeto e ela já estar disponível para uso, novamente sem precisar criar arquivos verbosos e extensos de configuração.</p>\n<p>Para melhor entendimento desse artigo é recomendado que você possua noções de <strong>REST</strong> e <strong>HTTP</strong>, caso você não possua poderá acompanhar esse artigo porém alguns conceitos sobre requisições <strong>HTTP</strong> e <strong>REST</strong> não serão explicados nesse artigo.</p>\n<h1 id=\"Criando-o-projeto-com-Spring-Initializr\" style=\"position:relative;\">Criando o projeto com Spring Initializr<a href=\"#Criando-o-projeto-com-Spring-Initializr\" aria-label=\"Criando o projeto com Spring Initializr permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>A <strong>Pivotal</strong> disponibiliza um site para nos auxiliar a criar uma aplicação com <strong>Spring Boot</strong>, o <a href=\"https://start.spring.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Spring Initializr</a>, vamos acessá-lo para criar uma aplicação usando <strong>Java 11</strong> e <strong>Maven</strong> como gerenciador de dependências.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 52.760736196319016%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABU0lEQVQoz5WSZ27CQBCFfYyAwb2tbda9ASFFyv2P9LJvJKNIBBJ+PK13vPNNtdK8hO0G2HsRbCdArAqosoLjx9i5oYj//CgT8c53jh8hzbW85RlnJYJYwdJ9gzDjwwAb20PRajTDgDApxJEipGoGtMNs7OoapO5GjMsZTT+h0A2itIA1LReoosJ278sj10/gBSm8MLlmTQCjM4vEaLVvdh5ebFfEbzIsRujGBbrpMc6vUFojPeQmSC0lrkCedKBW22+ymn6WUtYesZ9bh5G9h8737FZZteinI/rxCMJZlpSmqIP0RQB3MroBemEKQk+XDymdAIKo1IjwRxndANnsQrc4nt8xzCeZZmnunBpPVdbPATmMsuqwGCCzfPv8khYQxEDcgKeAdTuh6jrktdm/bhYQy2Xm1LrMon9ALe5UfqiNc4YoM4AsMDvIdfGva/LXZH/qGwMPOqGgbU7zAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"Spring Initializr 1\"\n        title=\"Spring Initializr 1\"\n        data-src=\"/static/9dca080b7a7478e8081016ee15e121c6/a6d36/Spring-Initializr-1.png\"\n        data-srcset=\"/static/9dca080b7a7478e8081016ee15e121c6/222b7/Spring-Initializr-1.png 163w,\n/static/9dca080b7a7478e8081016ee15e121c6/ff46a/Spring-Initializr-1.png 325w,\n/static/9dca080b7a7478e8081016ee15e121c6/a6d36/Spring-Initializr-1.png 650w,\n/static/9dca080b7a7478e8081016ee15e121c6/e548f/Spring-Initializr-1.png 975w,\n/static/9dca080b7a7478e8081016ee15e121c6/3c492/Spring-Initializr-1.png 1300w,\n/static/9dca080b7a7478e8081016ee15e121c6/46cee/Spring-Initializr-1.png 1687w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Após isso vamos clicar no botão <strong>ADD DEPENDENCIES…</strong> e adicionar a dependência <strong>SPring Web</strong>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 84.04907975460122%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACw0lEQVQ4y32UO2/TUBTH/U0gpM3Ldl712078SOzETpqmadUQVaiioiAGtkoFChIDbZlYESMrC6rUIsamYkF8qD/3XNdRhpThp/O4N+f+zzlyhGKxhmKxjsId1YYCub7BKYlVFMrSvaiGzbCgmQ6cto8NzYQQ7pmYPA+wfeShv2+iKKaXS1KVFyxWZG6XKYppTqo1F5AAskJ34mBy2MPWQQfJzEND0Rg6ylINa8UK1kvivdB5BsUkRAiCBNvbMwyHu0iSCcY7e5jO9uF3ezDtNkzHhW61YDCfsFouDBZTzmZtGnYLFrtDo6LCQlMz2KHDqrMXS+lr1CYplFkLFbm+QKwSDU4Wp7bB76+TQlIyGI0R9geIhyN4nYgfEjSnzF8VL+dJBG9Z0S0unbbkuAFvkbZGLZFPmzQdatVLfRoDtc7OshHo7P6iIBVJhlt8S5l82lZmM+iMfvQ/eMGmanAl9CoNWzNtro7UkNJ0GS3QPfrBqm1TflGwE6UzTDa3MBrvIIrZLAcjuEGXz2dZMW2SqG9o3NaaqU/ni4Ka3oIXROgNBmwxMfwwRC8ZoNPrI2CPRXGCMI4RhBEUw4RmWUyxA0U3oJomDKeFuqLyD4IQ/CEbvmuhVFAgVjSUSwokUeN+pawyq/Ic8fCBuJLcQwmPcjJyOVbw8JOD6YmJ9k4V3mMJ3lSCOxXvkBZ4UxnBrLoSn9HZr/Eawuf5FF//PMOXv09wcdvH+W2Ei3mU+vOQEXE+3nRwxuKzmy4jZHGX5y/mPZzfMH4HOP7O/hzeX/v48DPC8Q8Vry8tnFyaOL1u4fSKcFLL4jdXFrMO3l5l2DzO7r77ZePVNw3C+GkXs5eb2HsRY/cowujAhzmQYQ+rsBjLlvIZ1pLP480q9EiGYFoBfD9Gux3B82K4bh+qyj5+nX0xDMPwFnGhUEM+LyG/dg95Ef8AZi9LGQGmyFkAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"Spring Initializr 2\"\n        title=\"Spring Initializr 2\"\n        data-src=\"/static/5e61cacd49aa148728963b2fde0dfa8a/a6d36/Spring-Initializr-2.png\"\n        data-srcset=\"/static/5e61cacd49aa148728963b2fde0dfa8a/222b7/Spring-Initializr-2.png 163w,\n/static/5e61cacd49aa148728963b2fde0dfa8a/ff46a/Spring-Initializr-2.png 325w,\n/static/5e61cacd49aa148728963b2fde0dfa8a/a6d36/Spring-Initializr-2.png 650w,\n/static/5e61cacd49aa148728963b2fde0dfa8a/e548f/Spring-Initializr-2.png 975w,\n/static/5e61cacd49aa148728963b2fde0dfa8a/21335/Spring-Initializr-2.png 1082w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>E por fim clicar no botão <strong>GENERATE</strong> e o projeto será baixado em um <em>.zip</em></p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 60.122699386503065%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAA7DAAAOwwHHb6hkAAABzUlEQVQoz5VTSXLbQAzkK1yRTIqLuMxw3xctjB1HVX5XKnlMkg/EX3Ae1QEgi7bLPjiH5gyHQA/QDRphnIKx3rgw7S0sx0daVghUKns+Y2zcAK6vYG58rC1PzjgmzkqopECoU3iBghGmGnlbwQ0irE0idTwUXQ2dFnC2Ea43Hlamg7So8eXuHu1cwlU+XRYgK1v00wFNNyHJa2xDTYQ6Rz8e6SWmoC1sL4TthueVwJWsLVcuGKYjDqc9hsMkJCrJqSotuQ7FcpwR6QzjfkZedSjrHjUFBomCyrI3bQuoZcsmuOdz7kDw9N0IKWl3vEHTT3Ibt7kybXxiXNvSLicsyba3kLy66Om7wRuusqDqxt0sVao4hyahWWydlmLGewTvweC+WYOqHfH59kTEnRDFWSUOstj/RciBLG5aNGiHPcpmEPf8KBENGWzOhwlZN66uaDrMt3eYb77SehJzciJmKbiDDxPyI8lo7nJyVccy5DyLLMXVylpM4fcznveLwy9g8B/ALXFrfpjA1wp1P0iF7HySV8us8cp68gDzepnVlzCiOAODfx0/isWUn79+48/DAx4f/+Lb9x+ka4+JZrUjjetuxLA7ou3Pg33Jv+AfC5tiMkC7kEEAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"Spring Initializr 3\"\n        title=\"Spring Initializr 3\"\n        data-src=\"/static/eac48e39ec16c1bd3b7f8cf8c3ea69d4/a6d36/Spring-Initializr-3.png\"\n        data-srcset=\"/static/eac48e39ec16c1bd3b7f8cf8c3ea69d4/222b7/Spring-Initializr-3.png 163w,\n/static/eac48e39ec16c1bd3b7f8cf8c3ea69d4/ff46a/Spring-Initializr-3.png 325w,\n/static/eac48e39ec16c1bd3b7f8cf8c3ea69d4/a6d36/Spring-Initializr-3.png 650w,\n/static/eac48e39ec16c1bd3b7f8cf8c3ea69d4/e548f/Spring-Initializr-3.png 975w,\n/static/eac48e39ec16c1bd3b7f8cf8c3ea69d4/3c492/Spring-Initializr-3.png 1300w,\n/static/eac48e39ec16c1bd3b7f8cf8c3ea69d4/668c6/Spring-Initializr-3.png 1692w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Após isso basta descompactar o arquivo em alguma pasta de sua preferência e abrir com a sua <strong>IDE</strong> favorita, eu usei o <strong>IntelliJ</strong> nesse exemplo.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 650px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 57.05521472392638%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABRElEQVQoz6WS63KCMBCF8zoFAglQtAFyEUFabLXv/zCnmwDqOJ2pY398c3LZnGyyy/r3I/rxA24/oBtGdOOE6etMnOBobnYdam1Rtwaq0QE/bq1D63Zhv9EmxAy9BXP9AZ/nbxjXBRQFV68lqkIiTQWRQUgJzlPEcXwhijxRIKyRvpAypR30MEHZPZTpUKkWZSHIMEa1FcirHEmShENek1WTVa9wghXKoLQH1MMRG1I/l7lEkcUock7mGSRlKIScVebIhEBRlXRZAZFy2hPzpXQJ03aH6XSGNhYN8Va3dECGJ3iSOFqCr5mEMV+4fMH8fKa7HiMVwe72qI3DRjVIMzEH3AT+xfq3rCUjSxU2pM2d4W0RHiGi17B6Kbnnv4ZzhvSH3mhlNYyfNdSh937P8BmYo6Lopal9tluqsm+N+x57CM7xA3RbXZQ6WPXsAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image lazyload\"\n        alt=\"IntelliJ Spring Boot\"\n        title=\"IntelliJ Spring Boot\"\n        data-src=\"/static/ebbd89aa32e933dd40a8d8aa3e519674/a6d36/IntelliJ-Spring-Boot.png\"\n        data-srcset=\"/static/ebbd89aa32e933dd40a8d8aa3e519674/222b7/IntelliJ-Spring-Boot.png 163w,\n/static/ebbd89aa32e933dd40a8d8aa3e519674/ff46a/IntelliJ-Spring-Boot.png 325w,\n/static/ebbd89aa32e933dd40a8d8aa3e519674/a6d36/IntelliJ-Spring-Boot.png 650w,\n/static/ebbd89aa32e933dd40a8d8aa3e519674/e548f/IntelliJ-Spring-Boot.png 975w,\n/static/ebbd89aa32e933dd40a8d8aa3e519674/3c492/IntelliJ-Spring-Boot.png 1300w,\n/static/ebbd89aa32e933dd40a8d8aa3e519674/6c68b/IntelliJ-Spring-Boot.png 1888w\"\n        sizes=\"(max-width: 650px) 100vw, 650px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>Somente com isso a aplicação já está pronta pra rodar, sem nenhuma configuração necessária da nossa parte, para rodar a aplicação vamos utilizar o comando do maven <strong>mvn spring-boot:run</strong> no terminal e a saída será:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">  <span class=\"token builtin class-name\">.</span>   ____          _            __ _ _\n /<span class=\"token punctuation\">\\</span><span class=\"token punctuation\">\\</span> / ___<span class=\"token string\">'_ __ _ _(_)_ __  __ _ \\ \\ \\ \\\n( ( )\\___ | '</span>_ <span class=\"token operator\">|</span> <span class=\"token string\">'_| | '</span>_ <span class=\"token punctuation\">\\</span>/ _` <span class=\"token operator\">|</span> <span class=\"token punctuation\">\\</span> <span class=\"token punctuation\">\\</span> <span class=\"token punctuation\">\\</span> <span class=\"token punctuation\">\\</span>\n <span class=\"token punctuation\">\\</span><span class=\"token punctuation\">\\</span>/  ___<span class=\"token punctuation\">)</span><span class=\"token operator\">|</span> <span class=\"token operator\">|</span>_<span class=\"token punctuation\">)</span><span class=\"token operator\">|</span> <span class=\"token operator\">|</span> <span class=\"token operator\">|</span> <span class=\"token operator\">|</span> <span class=\"token operator\">|</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>_<span class=\"token operator\">|</span> <span class=\"token operator\">|</span>  <span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span> <span class=\"token punctuation\">)</span>\n  <span class=\"token string\">'  |____| .__|_| |_|_| |_\\__, | / / / /\n =========|_|==============|___/=/_/_/_/\n :: Spring Boot ::                (v2.6.5)\n\n2022-03-28 17:46:38.561  INFO 17452 --- [           main] c.p.webApplication.WebApplication        : Starting WebApplication using Java 17.0.1 on DESKTOP-QSCQPT8 with PID 17452 (C:\\Users\\guilh\\development<span class=\"token entity\" title=\"\\r\">\\r</span>epo\\webApplication<span class=\"token entity\" title=\"\\t\">\\t</span>arget<span class=\"token entity\" title=\"\\c\">\\c</span>lasses started by guilh in C:\\Users\\guilh\\development<span class=\"token entity\" title=\"\\r\">\\r</span>epo\\webApplication)\n2022-03-28 17:46:38.568  INFO 17452 --- [           main] c.p.webApplication.WebApplication        : No active profile set, falling back to 1 default profile: \"default\"\n2022-03-28 17:46:40.311  INFO 17452 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)\n2022-03-28 17:46:40.329  INFO 17452 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]\n2022-03-28 17:46:40.329  INFO 17452 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.60]\n2022-03-28 17:46:40.482  INFO 17452 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext\n2022-03-28 17:46:40.483  INFO 17452 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1802 ms\n2022-03-28 17:46:41.272  INFO 17452 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path '</span>'\n<span class=\"token number\">2022</span>-03-28 <span class=\"token number\">17</span>:46:41.293  INFO <span class=\"token number\">17452</span> --- <span class=\"token punctuation\">[</span>           main<span class=\"token punctuation\">]</span> c.p.webApplication.WebApplication        <span class=\"token builtin class-name\">:</span> Started WebApplication <span class=\"token keyword\">in</span> <span class=\"token number\">3.505</span> seconds <span class=\"token punctuation\">(</span>JVM running <span class=\"token keyword\">for</span> <span class=\"token number\">4.542</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Caso você não possua o <strong>Maven</strong> instalado na máquina pode usar o binário que veio junto com o projeto quando criamos no <strong>Spring Initializr</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">./mvnw spring-boot:run</code></pre></div>\n<p>Perceba que ele iniciou o <strong>Tomcat</strong> que vem embarcado quando adicionamos a dependência do <strong>Spring Web</strong> e já está configurado na porta <strong>8080</strong>.</p>\n<h1 id=\"Gerenciador-de-dependencias\" style=\"position:relative;\">Gerenciador de dependências<a href=\"#Gerenciador-de-dependencias\" aria-label=\"Gerenciador de dependencias permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>Estamos utilizando o <strong>Maven</strong> como gerenciador de dependências, poderíamos utilizar o <strong>Gradle</strong> sem problema nenhum, se abrirmos o arquivo <strong>pom.xml</strong> que é onde estão as dependências iremos ver algo do gênero:</p>\n<div class=\"gatsby-highlight\" data-language=\"xml\"><pre class=\"language-xml\"><code class=\"language-xml\"><span class=\"token prolog\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>project</span> <span class=\"token attr-name\">xmlns</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>http://maven.apache.org/POM/4.0.0<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\"><span class=\"token namespace\">xmlns:</span>xsi</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>http://www.w3.org/2001/XMLSchema-instance<span class=\"token punctuation\">\"</span></span>\n\t<span class=\"token attr-name\"><span class=\"token namespace\">xsi:</span>schemaLocation</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>modelVersion</span><span class=\"token punctuation\">></span></span>4.0.0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>modelVersion</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>parent</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">></span></span>org.springframework.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">></span></span>spring-boot-starter-parent<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">></span></span>2.6.5<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>relativePath</span><span class=\"token punctuation\">/></span></span> <span class=\"token comment\">&lt;!-- lookup parent from repository --></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>parent</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">></span></span>br.com.programadev<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">></span></span>webApplication<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>version</span><span class=\"token punctuation\">></span></span>0.0.1-SNAPSHOT<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>version</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>name</span><span class=\"token punctuation\">></span></span>webApplication<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>name</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>description</span><span class=\"token punctuation\">></span></span>Demo project for Spring Boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>description</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>properties</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>java.version</span><span class=\"token punctuation\">></span></span>11<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>java.version</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>properties</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependencies</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">></span></span>org.springframework.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">></span></span>spring-boot-starter-web<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">></span></span>\n\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>dependency</span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">></span></span>org.springframework.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">></span></span>spring-boot-starter-test<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>scope</span><span class=\"token punctuation\">></span></span>test<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>scope</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependency</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>dependencies</span><span class=\"token punctuation\">></span></span>\n\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>build</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>plugins</span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>plugin</span><span class=\"token punctuation\">></span></span>\n\t\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>groupId</span><span class=\"token punctuation\">></span></span>org.springframework.boot<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>groupId</span><span class=\"token punctuation\">></span></span>\n\t\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>artifactId</span><span class=\"token punctuation\">></span></span>spring-boot-maven-plugin<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>artifactId</span><span class=\"token punctuation\">></span></span>\n\t\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>plugin</span><span class=\"token punctuation\">></span></span>\n\t\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>plugins</span><span class=\"token punctuation\">></span></span>\n\t<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>build</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>project</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>Existem várias informações nesse arquivo, porém a que nos interessa é a parte <strong><dependencies></strong> onde temos duas dependências,a primeira do <strong>Spring Web</strong> e a segunda para testes. Perceba que basta adicionar uma dependência nessa seção e o <strong>Maven</strong> irá baixar, instalar e o <strong>Spring Boot</strong> irá plugá-la no projeto.</p>\n<p>Para saber onde encontrar dependências para o <strong>Spring Boot</strong> e projetos <strong>Java</strong> em geral basta acessar o site do <a href=\"https://mvnrepository.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Maven Repository</a>.</p>\n<h1 id=\"Configurando-rotas\" style=\"position:relative;\">Configurando rotas<a href=\"#Configurando-rotas\" aria-label=\"Configurando rotas permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>Agora vamos iniciar com a nossa primeira rota, será um endpoint simples que deve devolver a mensagem <strong>HelloWorld</strong>. Vou criar uma pasta nova no projeto chamada <strong>controller</strong> e nela vou criar o arquivo <strong>HelloWorld.java</strong>.</p>\n<p>Você vai perceber que criar uma rota ou qualquer outra configuração é muito mais simples no <strong>Spring Boot</strong> pois ele utiliza o conceito de usar as <strong>Annotations</strong> do <strong>Java</strong> o que deixa mais simples de entender onde as configurações estão.</p>\n<p>E para criar uma <strong>Controller REST</strong> nesse projeto basta adicionar a <strong>annotation @RestController</strong> que o <strong>Spring Boot</strong> será capaz de tratar esse arquivo como sendo um <strong>endpoint</strong> e como ele é especializado em <strong>REST</strong> por padrão saberá tratar objetos <strong>JSON</strong> por padrão, tanto pra receber quanto pra devolver nos endpoints.</p>\n<p>Outra <strong>annotation</strong> que iremos adicionar é a <strong>@RequestMapping</strong> e através dela poderemos configurar qual será a <em>url path</em> que esse <em>controller</em> irá administrar, nesse exemplo será a url <em>/hello</em>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/hello\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">HelloWorld</span> <span class=\"token punctuation\">{</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Agora é necessário que esse <em>controller</em> seja capaz de atender alguma requisição <strong>HTTP</strong>, como <strong>GET</strong>, <strong>POST</strong> e etc. Fazer isso também é muito fácil no <strong>Spring Boot</strong> e você já deve ter algum palpite que isso será feito com uma <strong>annotation</strong>.</p>\n<p>Vamos criar um mapeamento para o verbo <strong>GET</strong> que ira devolver a mensagem <strong>HelloWorld</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@GetMapping</span>\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">helloWorld</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Hello World\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Pronto o <em>controller</em> está pronto pra uso e vamos subir a aplicação e testar a rota:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">curl</span> --location --request GET <span class=\"token string\">'localhost:8080/hello'</span>\nHello World</code></pre></div>\n<p>Pronto a nossa aplicação com <strong>Spring Boot</strong> está pronta e funcionando.</p>\n<h2 id=\"Trabalhando-com-JSON\" style=\"position:relative;\">Trabalhando com JSON<a href=\"#Trabalhando-com-JSON\" aria-label=\"Trabalhando com JSON permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Quando trabalhamos com aplicações <strong>REST</strong> por padrão trabalhamos com objetos <strong>JSON</strong> e vamos entender como o <strong>Spring Boot</strong> lida com esse formato e como trabalhamos com ele.</p>\n<p>Explicando rapidamente o que é <strong>JSON</strong>, é um acrônimo para <strong>JavaScript Object Notation</strong> e é um estrutura para troca de dados muito leve, de fácil escrita e fácil leitura para humanos. Antigamente haviam outros formatos para comunicação entre sistemas mas eram mais verbosos para escrever e de difícil leitura e interpretação para humanos o que acabava por vezes causando erros que só eram percebidos em tempo de execução.</p>\n<p>Mas como o <strong>Spring Boot</strong> faz para interpretar e transformar um objeto <strong>JSON</strong> em um objeto <strong>Java</strong>?</p>\n<p>Pra demonstrar como isso é feito no <strong>Spring Boot</strong> vamos criar um objeto <strong>Java</strong> e criar outro endpoint para que esse objeto seja mostrado em um <strong>GET</strong>.</p>\n<p>Primeiro criando a classe <strong>User</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">User</span> <span class=\"token punctuation\">{</span>                   \n                                      \n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> name<span class=\"token punctuation\">;</span>              \n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">Integer</span> age<span class=\"token punctuation\">;</span>              \n                                      \n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">getName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>         \n        <span class=\"token keyword\">return</span> name<span class=\"token punctuation\">;</span>                  \n    <span class=\"token punctuation\">}</span>                                 \n                                      \n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setName</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> name<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>name <span class=\"token operator\">=</span> name<span class=\"token punctuation\">;</span>             \n    <span class=\"token punctuation\">}</span>                                 \n                                      \n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">Integer</span> <span class=\"token function\">getAge</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>         \n        <span class=\"token keyword\">return</span> age<span class=\"token punctuation\">;</span>                   \n    <span class=\"token punctuation\">}</span>                                 \n                                      \n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setAge</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Integer</span> age<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> \n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>age <span class=\"token operator\">=</span> age<span class=\"token punctuation\">;</span>               \n    <span class=\"token punctuation\">}</span>                                 \n<span class=\"token punctuation\">}</span>                                     </code></pre></div>\n<p>Agora vamos criar o endpoint:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@RestController</span>\n<span class=\"token annotation punctuation\">@RequestMapping</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/user\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">UserController</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token annotation punctuation\">@GetMapping</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">User</span> <span class=\"token function\">getUser</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">User</span> user <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">User</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        user<span class=\"token punctuation\">.</span><span class=\"token function\">setAge</span><span class=\"token punctuation\">(</span><span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        user<span class=\"token punctuation\">.</span><span class=\"token function\">setName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Fulano\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> user<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Note que utilizamos as mesmas annotations <strong>@RestController</strong> e <strong>@RequestMapping</strong> porém agora alterando o valor para <strong>/user</strong> e criamos um método chamado <strong>getUser</strong> que retorna um <strong>User</strong>; o que irá acontecer se fizermos um request pra <strong>/user</strong>? Vamos iniciar o servidor e fazer essa requisição para ver o que acontece:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">curl</span> --location --request GET <span class=\"token string\">'localhost:8080/user'</span>\n\n<span class=\"token punctuation\">{</span>\n    <span class=\"token string\">\"name\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"Fulano\"</span>,\n    <span class=\"token string\">\"age\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token number\">20</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>O próprio <strong>Spring Boot</strong> através do <strong>Spring Web</strong> que nós adicionamos no projeto lá no começo é capaz de sozinho entender como manipular e fazer s conversão entre um objeto do <strong>Java</strong> para um <strong>JSON</strong> e vice e versa.</p>\n<p>Agora vamos ver o outro lado, vamos criar um endpoint para enviar um <strong>JSON</strong> e transformá-lo em um objeto <strong>Java</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@PostMapping</span>\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">User</span> <span class=\"token function\">postUser</span><span class=\"token punctuation\">(</span><span class=\"token annotation punctuation\">@RequestBody</span> <span class=\"token class-name\">User</span> user<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> user<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>O método <strong>postUser</strong> recebe um objeto <strong>Java</strong> do tipo <strong>User</strong> e retorna o mesmo objeto, porém quando vamos fazer o <strong>POST</strong> não iremos enviar um objeto <strong>Java</strong> e sim um <strong>JSON</strong>. Para que seja feita a conversão basta que nós coloquemos a annotation <strong>@RequestBody</strong> e o <strong>Spring Boot</strong> será capaz de fazer a conversão por nós.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">curl</span> --location --request POST <span class=\"token string\">'localhost:8080/user'</span> <span class=\"token punctuation\">\\</span>\n--header <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n--data-raw <span class=\"token string\">'{\n    \"name\": \"Beltrano\",\n    \"age\": 30\n}'</span>\n\n<span class=\"token punctuation\">{</span>\n    <span class=\"token string\">\"name\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"Beltrano\"</span>,\n    <span class=\"token string\">\"age\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token number\">30</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Pronto conseguimos manipular e converter objetos <strong>JSON</strong> com facilidade sem configurações adicionais.</p>\n<h1 id=\"Conclusao\" style=\"position:relative;\">Conclusão<a href=\"#Conclusao\" aria-label=\"Conclusao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>Nesse artigo introdutório ao <strong>Spring Boot</strong>, vimos como criar um projeto do zero usando a ferramenta do <strong>Spring Initializr</strong> e entendemos a facilidade que o <strong>Spring Boot</strong> trouxe para trabalhar com projetos <strong>Java</strong> uma vez que já vem pré-configurado e também é de fácil configuração e adicionar dependências nele é super fácil bastando adicionar a dependência no gerenciador de dependências, no nosso caso usamos <strong>Maven</strong> mas também poderia ser <strong>Gradle</strong>. Também criamos o nosso servidor com <strong>Tomcat</strong> sem nenhum esforço e mapeamos rotas que recebem e devolvem objetos <strong>JSON</strong> com uma facilidade incrível, por essas e outras facilidades o <strong>Spring Boot</strong> ganhou muita força e popularidade.</p>\n<p>O código fonte desse artigo você encontra no nosso <a href=\"https://github.com/guilhermegarcia86/webApplication\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a></p>\n<p>Visite também o nosso canal no <a href=\"https://www.youtube.com/channel/UCDWmrzFPkkQf5VI_ziZrgvw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Youtube</a> e acompanhe as nossas lives na <a href=\"https://www.twitch.tv/rinha_de_devs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Twitch</a></p>","fields":{"slug":"/spring-boot-web/"},"frontmatter":{"date":"31 de março de 2022","description":"Criando um servidor HTTP com Java","title":"Iniciando com Spring Boot","tags":["SpringBoot","Java","Beginner"],"author":"Guilherme Alves","image":{"id":"ed810f51-805b-55b9-ab2c-4ae702b7dd74","publicURL":"/static/04234275ae8eff591cfcab4ea3c2cd90/artigo-spring-boot.png","childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAABrklEQVQ4y41T21LCMBRM0oICQhmLLaAO13IrnRHlOkVA0QFHH3XGJ5/8/19Ym/RCCuL4sJPT05M9ezYJYZQiBA0QfiuMCcg1B/WERPs4SJiQi/Yb8Jr/NOAgsppjagXRHyTyHhISEU8FB1ejykqOqFIoOxid+SN7P1WGjJZEJn8CNamIYlVVohFVJYi9NWwg52UvBWHr3kBvY6D9pMNa6pHa/0K2iJiNrCCZPPfx9rnG5muKl/cVFvMFWpaFaqWCyXgs4ulkgtFwKGDbNlarFXq9XoyUdNcmrgcahq9NLD9uMFhbePuew3VddDoddNptjEYj9D2C2WwKx3Ewd+eoVito1OsoFk2PyCNkwSkXamewNyWU+1mY3TRaDzourLTflfnehIclVkaQTCm/js6JCQ+abgHOSxn9bQndR9Mz3zOaHF4fXutsy6je6jAbOViugdpdAc3ZBTQz5RPzzvyUU1pCQEmwmCfRVWE+4aWdh1HP4vwqI+KccSoaaMWQULqDO+lUKKR7ryccW2H0+Mg0CGIIPIvulwxKYu9X+CztIVQ2XFrp3luOk+5yRMrz+Ac4NjiXn1i9dAAAAABJRU5ErkJggg==","aspectRatio":1.4096916299559472,"src":"/static/04234275ae8eff591cfcab4ea3c2cd90/0823f/artigo-spring-boot.png","srcSet":"/static/04234275ae8eff591cfcab4ea3c2cd90/c67b7/artigo-spring-boot.png 320w,\n/static/04234275ae8eff591cfcab4ea3c2cd90/d3930/artigo-spring-boot.png 640w,\n/static/04234275ae8eff591cfcab4ea3c2cd90/0823f/artigo-spring-boot.png 1280w,\n/static/04234275ae8eff591cfcab4ea3c2cd90/b3c49/artigo-spring-boot.png 1745w","sizes":"(max-width: 1280px) 100vw, 1280px"}}}},"timeToRead":9}},"pageContext":{"slug":"/spring-boot-web/","previous":{"fields":{"slug":"/git-no-dia-a-dia/"},"frontmatter":{"title":"Git para o seu dia a dia","date":"21 mar, 2022"}},"next":null}},"staticQueryHashes":["63159454"]}