{"id":950,"date":"2020-06-22T11:54:28","date_gmt":"2020-06-22T14:54:28","guid":{"rendered":"https:\/\/micheladrianomedeiros.com.br\/blog\/?p=950"},"modified":"2020-06-24T00:50:58","modified_gmt":"2020-06-24T03:50:58","slug":"introducao-ao-spring-boot-4","status":"publish","type":"post","link":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/","title":{"rendered":"Introdu\u00e7\u00e3o ao Spring Boot #4"},"content":{"rendered":"\n<p>Vamos rever os arquivos que criamos:<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 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\/introducao-ao-spring-boot-4\/#pomxml\" >pom.xml<\/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\/introducao-ao-spring-boot-4\/#Examplejava\" >Example.java<\/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\/introducao-ao-spring-boot-4\/#Criando_e_Executando_um_JAR\" >Criando e Executando um JAR<\/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\/introducao-ao-spring-boot-4\/#Executaveis_jars_e_Java\" >Execut\u00e1veis jars e Java<\/a><\/li><\/ul><\/nav><\/div>\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"pomxml\"><\/span>pom.xml<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?>\n&lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n    xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\">\n    &lt;modelVersion>4.0.0&lt;\/modelVersion>\n\n    &lt;groupId>com.example&lt;\/groupId>\n    &lt;artifactId>myproject&lt;\/artifactId>\n    &lt;version>0.0.1-SNAPSHOT&lt;\/version>\n\n    &lt;parent>\n        &lt;groupId>org.springframework.boot&lt;\/groupId>\n        &lt;artifactId>spring-boot-starter-parent&lt;\/artifactId>\n        &lt;version>2.3.1.RELEASE&lt;\/version>\n    &lt;\/parent>\n\n    &lt;description\/>\n    &lt;developers>\n        &lt;developer\/>\n    &lt;\/developers>\n    &lt;licenses>\n        &lt;license\/>\n    &lt;\/licenses>\n    &lt;scm>\n        &lt;url\/>\n    &lt;\/scm>\n    &lt;url\/>\n\t\n\t&lt;dependencies>\n\t\t&lt;dependency>\n\t\t\t&lt;groupId>org.springframework.boot&lt;\/groupId>\n\t\t\t&lt;artifactId>spring-boot-starter-web&lt;\/artifactId>\n\t\t&lt;\/dependency>\n\t&lt;\/dependencies>\n\t\n&lt;\/project><\/code><\/pre>\n\n\n\n<p>O arquivo Example.java deve ficar na pasta src\/main\/java.Example.java.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Examplejava\"><\/span>Example.java<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>import org.springframework.boot.*;\nimport org.springframework.boot.autoconfigure.*;\nimport org.springframework.web.bind.annotation.*;\n\n@RestController\n@EnableAutoConfiguration\npublic class Example {\n\n    @RequestMapping(\"\/\")\n    String home() {\n        return \"Hello World!\";\n    }\n\n    public static void main(String&#91;] args) {\n        SpringApplication.run(Example.class, args);\n    }\n\n}<\/code><\/pre>\n\n\n\n<p>Nesse ponto a aplica\u00e7\u00e3o deve estar funcionando. Desde que voc\u00ea usou o spring-boot-starter-parent POM, voc\u00ea tem que usar o run para executar a aplica\u00e7\u00e3o.<\/p>\n\n\n\n<p>Execute o comando mvn spring-boot:run e voc\u00ea deve ver algo do tipo:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"525\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-20-1024x525.png\" alt=\"\" class=\"wp-image-951\" srcset=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-20-1024x525.png 1024w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-20-300x154.png 300w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-20-768x394.png 768w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-20.png 1081w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p>Se voc\u00ea abrir o seu navegador no endere\u00e7o <a href=\"http:\/\/localhost:8080\/\">http:\/\/localhost:8080\/<\/a> ver\u00e1 a mensagem:<\/p>\n\n\n\n<p>Hello World!<\/p>\n\n\n\n<p>Para parar o aplicativo pressione as teclas: CTRL+C.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Criando_e_Executando_um_JAR\"><\/span>Criando e Executando um JAR<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Para terminar o exemplo que criamos, temos que criar um execut\u00e1vel com a extens\u00e3o jar. Execut\u00e1veis jars(algumas vezes chamado de &#8220;fat jars&#8221;) s\u00e3o arquivos que cont\u00e9m classes compiladas com depend\u00eancias que precisam para o seu c\u00f3digo ser executado.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Executaveis_jars_e_Java\"><\/span>Execut\u00e1veis jars e Java<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Java n\u00e3o fornece um jeito padr\u00e3o para carregar arquivos jar aninhados(arquivos jar que cont\u00e9m dentro dele um jar). Isso pode ser um problema se voc\u00ea quer distribuir uma aplica\u00e7\u00e3o que seja independente.<\/p>\n\n\n\n<p>Para resolver esse problema, muitos desenvolvedores utilizam &#8220;uber&#8221; jars. Um pacote uber jar cont\u00e9m todas as classes para sua aplica\u00e7\u00e3o ter um simples arquivo. <\/p>\n\n\n\n<p>O problema com essa abordagem \u00e9 que se torna dif\u00edcil ver quais bibliotecas est\u00e3o dentro da sua aplica\u00e7\u00e3o. Isso pode ser um problema se o arquivo com o mesmo nome, for utilizado(em diferentes projetos) em m\u00faltiplos jars.<\/p>\n\n\n\n<p>Para criar um execut\u00e1vel jar, precisamos adicionar o spring-boot-maven-plugin ao nosso pom.xml. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;build>\n    &lt;plugins>\n        &lt;plugin>\n            &lt;groupId>org.springframework.boot&lt;\/groupId>\n            &lt;artifactId>spring-boot-maven-plugin&lt;\/artifactId>\n        &lt;\/plugin>\n    &lt;\/plugins>\n&lt;\/build><\/code><\/pre>\n\n\n\n<p>O <code>spring-boot-starter-parent<\/code>&nbsp;POM inclui configura\u00e7\u00f5es  (&lt;executions&gt;) para ligar ao repackage. Se voc\u00ea n\u00e3o usar o parent POM, voc\u00ea precisa declarar essa configura\u00e7\u00e3o.<\/p>\n\n\n\n<p>Execute o comando mvn package:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"972\" height=\"629\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-21.png\" alt=\"\" class=\"wp-image-953\" srcset=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-21.png 972w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-21-300x194.png 300w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-21-768x497.png 768w\" sizes=\"auto, (max-width: 972px) 100vw, 972px\" \/><\/figure><\/div>\n\n\n\n<p>Se voc\u00ea for na pasta target do seu projeto, voc\u00ea ver\u00e1 o arquivo myproject-0.0.1-SNAPSHOT.jar. O arquivo deve ter um tamanho mais ou menos de 16 MB. <\/p>\n\n\n\n<p>Se quiser ver o interior do arquivo fa\u00e7a o comando:<\/p>\n\n\n\n<p>jar tvf myproject-0.0.1-SNAPSHOT.jar<\/p>\n\n\n\n<p>H\u00e1 um outro arquivo chamado myproject-0.0.1-SNAPSHOT.jar.original que est\u00e1 na pasta target. Isso \u00e9 um arquivo jar original que o Maven cria antes ser reempacotado pelo Spring Boot.<\/p>\n\n\n\n<p>Para executar o arquivo criado execute o comando:<\/p>\n\n\n\n<p> java -jar myproject-0.0.1-SNAPSHOT.jar<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"596\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-22-1024x596.png\" alt=\"\" class=\"wp-image-954\" srcset=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-22-1024x596.png 1024w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-22-300x175.png 300w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-22-768x447.png 768w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/image-22.png 1082w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Para parar a aplica\u00e7\u00e3o pressione as teclas CTRL+C.<\/p>\n\n\n\n<p>Caso queira o ebook para iniciar a configura\u00e7\u00e3o do ambiente Spring Boot assine a lista.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"922\" src=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/Spring-Boot-Volume-1.png\" alt=\"\" class=\"wp-image-968\" srcset=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/Spring-Boot-Volume-1.png 1000w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/Spring-Boot-Volume-1-300x277.png 300w, https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2020\/06\/Spring-Boot-Volume-1-768x708.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure><\/div>\n\n\n\n<style>\n #_form_57_ { font-size:14px; line-height:1.6; font-family:arial, helvetica, sans-serif; margin:0; }\n #_form_57_ * { outline:0; }\n ._form_hide { display:none; visibility:hidden; }\n ._form_show { display:block; visibility:visible; }\n #_form_57_._form-top { top:0; }\n #_form_57_._form-bottom { bottom:0; }\n #_form_57_._form-left { left:0; }\n #_form_57_._form-right { right:0; }\n #_form_57_ input[type=\"text\"],#_form_57_ input[type=\"date\"],#_form_57_ textarea { padding:6px; height:auto; border:#979797 1px solid; border-radius:4px; color:#000 !important; font-size:14px; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; }\n #_form_57_ textarea { resize:none; }\n #_form_57_ ._submit { -webkit-appearance:none; cursor:pointer; font-family:arial, sans-serif; font-size:14px; text-align:center; background:#1ad7db !important; border:0 !important; -moz-border-radius:4px !important; -webkit-border-radius:4px !important; border-radius:4px !important; color:#fff !important; padding:10px !important; }\n #_form_57_ ._close-icon { cursor:pointer; background-image:url('https:\/\/d226aj4ao1t61q.cloudfront.net\/esfkyjh1u_forms-close-dark.png'); background-repeat:no-repeat; background-size:14.2px 14.2px; position:absolute; display:block; top:11px; right:9px; overflow:hidden; width:16.2px; height:16.2px; }\n #_form_57_ ._close-icon:before { position:relative; }\n #_form_57_ ._form-body { margin-bottom:30px; }\n #_form_57_ ._form-image-left { width:150px; float:left; }\n #_form_57_ ._form-content-right { margin-left:164px; }\n #_form_57_ ._form-branding { color:#fff; font-size:10px; clear:both; text-align:left; margin-top:30px; font-weight:100; }\n #_form_57_ ._form-branding ._logo { display:block; width:130px; height:14px; margin-top:6px; background-image:url('https:\/\/d226aj4ao1t61q.cloudfront.net\/hh9ujqgv5_aclogo_li.png'); background-size:130px auto; background-repeat:no-repeat; }\n #_form_57_ ._form-label,#_form_57_ ._form_element ._form-label { font-weight:bold; margin-bottom:5px; display:block; }\n #_form_57_._dark ._form-branding { color:#333; }\n #_form_57_._dark ._form-branding ._logo { background-image:url('https:\/\/d226aj4ao1t61q.cloudfront.net\/jftq2c8s_aclogo_dk.png'); }\n #_form_57_ ._form_element { position:relative; margin-bottom:10px; font-size:0; max-width:100%; }\n #_form_57_ ._form_element * { font-size:14px; }\n #_form_57_ ._form_element._clear { clear:both; width:100%; float:none; }\n #_form_57_ ._form_element._clear:after { clear:left; }\n #_form_57_ ._form_element input[type=\"text\"],#_form_57_ ._form_element input[type=\"date\"],#_form_57_ ._form_element select,#_form_57_ ._form_element textarea:not(.g-recaptcha-response) { display:block; width:100%; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; }\n #_form_57_ ._field-wrapper { position:relative; }\n #_form_57_ ._inline-style { float:left; }\n #_form_57_ ._inline-style input[type=\"text\"] { width:150px; }\n #_form_57_ ._inline-style:not(._clear) + ._inline-style:not(._clear) { margin-left:20px; }\n #_form_57_ ._form_element img._form-image { max-width:100%; }\n #_form_57_ ._clear-element { clear:left; }\n #_form_57_ ._full_width { width:100%; }\n #_form_57_ ._form_full_field { display:block; width:100%; margin-bottom:10px; }\n #_form_57_ input[type=\"text\"]._has_error,#_form_57_ textarea._has_error { border:#f37c7b 1px solid; }\n #_form_57_ input[type=\"checkbox\"]._has_error { outline:#f37c7b 1px solid; }\n #_form_57_ ._error { display:block; position:absolute; font-size:14px; z-index:10000001; }\n #_form_57_ ._error._above { padding-bottom:4px; bottom:39px; right:0; }\n #_form_57_ ._error._below { padding-top:4px; top:100%; right:0; }\n #_form_57_ ._error._above ._error-arrow { bottom:0; right:15px; border-left:5px solid transparent; border-right:5px solid transparent; border-top:5px solid #f37c7b; }\n #_form_57_ ._error._below ._error-arrow { top:0; right:15px; border-left:5px solid transparent; border-right:5px solid transparent; border-bottom:5px solid #f37c7b; }\n #_form_57_ ._error-inner { padding:8px 12px; background-color:#f37c7b; font-size:14px; font-family:arial, sans-serif; color:#fff; text-align:center; text-decoration:none; -webkit-border-radius:4px; -moz-border-radius:4px; border-radius:4px; }\n #_form_57_ ._error-inner._form_error { margin-bottom:5px; text-align:left; }\n #_form_57_ ._button-wrapper ._error-inner._form_error { position:static; }\n #_form_57_ ._error-inner._no_arrow { margin-bottom:10px; }\n #_form_57_ ._error-arrow { position:absolute; width:0; height:0; }\n #_form_57_ ._error-html { margin-bottom:10px; }\n .pika-single { z-index:10000001 !important; }\n #_form_57_ input[type=\"text\"].datetime_date { width:69%; display:inline; }\n #_form_57_ select.datetime_time { width:29%; display:inline; height:32px; }\n @media all and (min-width:320px) and (max-width:667px) { ::-webkit-scrollbar { display:none; }\n #_form_57_ { margin:0; width:100%; min-width:100%; max-width:100%; box-sizing:border-box; }\n #_form_57_ * { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; font-size:1em; }\n #_form_57_ ._form-content { margin:0; width:100%; }\n #_form_57_ ._form-inner { display:block; min-width:100%; }\n #_form_57_ ._form-title,#_form_57_ ._inline-style { margin-top:0; margin-right:0; margin-left:0; }\n #_form_57_ ._form-title { font-size:1.2em; }\n #_form_57_ ._form_element { margin:0 0 20px; padding:0; width:100%; }\n #_form_57_ ._form-element,#_form_57_ ._inline-style,#_form_57_ input[type=\"text\"],#_form_57_ label,#_form_57_ p,#_form_57_ textarea:not(.g-recaptcha-response) { float:none; display:block; width:100%; }\n #_form_57_ ._row._checkbox-radio label { display:inline; }\n #_form_57_ ._row,#_form_57_ p,#_form_57_ label { margin-bottom:0.7em; width:100%; }\n #_form_57_ ._row input[type=\"checkbox\"],#_form_57_ ._row input[type=\"radio\"] { margin:0 !important; vertical-align:middle !important; }\n #_form_57_ ._row input[type=\"checkbox\"] + span label { display:inline; }\n #_form_57_ ._row span label { margin:0 !important; width:initial !important; vertical-align:middle !important; }\n #_form_57_ ._form-image { max-width:100%; height:auto !important; }\n #_form_57_ input[type=\"text\"] { padding-left:10px; padding-right:10px; font-size:16px; line-height:1.3em; -webkit-appearance:none; }\n #_form_57_ input[type=\"radio\"],#_form_57_ input[type=\"checkbox\"] { display:inline-block; width:1.3em; height:1.3em; font-size:1em; margin:0 0.3em 0 0; vertical-align:baseline; }\n #_form_57_ button[type=\"submit\"] { padding:20px; font-size:1.5em; }\n #_form_57_ ._inline-style { margin:20px 0 0 !important; }\n }\n #_form_57_ { position:relative; text-align:left; margin:25px auto 0; padding:20px; -webkit-box-sizing:border-box; -moz-box-sizing:border-box; box-sizing:border-box; *zoom:1; background:#5f2f14 !important; border:0px solid #b0b0b0 !important; width:500px; -moz-border-radius:0px !important; -webkit-border-radius:0px !important; border-radius:0px !important; color:#fff !important; }\n #_form_57_ ._form-title { font-size:22px; line-height:22px; font-weight:600; margin-bottom:0; }\n #_form_57_:before,#_form_57_:after { content:\" \"; display:table; }\n #_form_57_:after { clear:both; }\n #_form_57_._inline-style { width:auto; display:inline-block; }\n #_form_57_._inline-style input[type=\"text\"],#_form_57_._inline-style input[type=\"date\"] { padding:10px 12px; }\n #_form_57_._inline-style button._inline-style { position:relative; top:27px; }\n #_form_57_._inline-style p { margin:0; }\n #_form_57_._inline-style ._button-wrapper { position:relative; margin:27px 12.5px 0 20px; }\n #_form_57_ ._form-thank-you { position:relative; left:0; right:0; text-align:center; font-size:18px; }\n @media all and (min-width:320px) and (max-width:667px) { #_form_57_._inline-form._inline-style ._inline-style._button-wrapper { margin-top:20px !important; margin-left:0 !important; }\n }\n<\/style>\n<form method=\"POST\" action=\"https:\/\/ziguifrid.activehosted.com\/proc.php\" id=\"_form_57_\" class=\"_form _form_57 _inline-form  \" novalidate=\"\">\n  <input type=\"hidden\" name=\"u\" value=\"57\">\n  <input type=\"hidden\" name=\"f\" value=\"57\">\n  <input type=\"hidden\" name=\"s\">\n  <input type=\"hidden\" name=\"c\" value=\"0\">\n  <input type=\"hidden\" name=\"m\" value=\"0\">\n  <input type=\"hidden\" name=\"act\" value=\"sub\">\n  <input type=\"hidden\" name=\"v\" value=\"2\">\n  <div class=\"_form-content\">\n    <div class=\"_form_element _x75760560 _full_width \">\n      <label class=\"_form-label\">\n      <\/label>\n      <div class=\"_field-wrapper\">\n        <input type=\"text\" name=\"email\" placeholder=\"Digite seu e-mail\" required=\"\">\n      <\/div>\n    <\/div>\n    <div class=\"_button-wrapper _full_width\">\n      <button id=\"_form_57_submit\" class=\"_submit\" type=\"submit\">\n        Enviar\n      <\/button>\n    <\/div>\n    <div class=\"_clear-element\">\n    <\/div>\n  <\/div>\n  <div class=\"_form-thank-you\" style=\"display:none;\">\n  <\/div>\n<\/form><script type=\"text\/javascript\">\nwindow.cfields = [];\nwindow._show_thank_you = function(id, message, trackcmp_url) {\n  var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you');\n  form.querySelector('._form-content').style.display = 'none';\n  thank_you.innerHTML = message;\n  thank_you.style.display = 'block';\n  if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {\n    \/\/ Site tracking URL to use after inline form submission.\n    _load_script(trackcmp_url);\n  }\n  if (typeof window._form_callback !== 'undefined') window._form_callback(id);\n};\nwindow._show_error = function(id, message, html) {\n  var form = document.getElementById('_form_' + id + '_'), err = document.createElement('div'), button = form.querySelector('button'), old_error = form.querySelector('._form_error');\n  if (old_error) old_error.parentNode.removeChild(old_error);\n  err.innerHTML = message;\n  err.className = '_error-inner _form_error _no_arrow';\n  var wrapper = document.createElement('div');\n  wrapper.className = '_form-inner';\n  wrapper.appendChild(err);\n  button.parentNode.insertBefore(wrapper, button);\n  document.querySelector('[id^=\"_form\"][id$=\"_submit\"]').disabled = false;\n  if (html) {\n    var div = document.createElement('div');\n    div.className = '_error-html';\n    div.innerHTML = html;\n    err.appendChild(div);\n  }\n};\nwindow._load_script = function(url, callback) {\n  var head = document.querySelector('head'), script = document.createElement('script'), r = false;\n  script.type = 'text\/javascript';\n  script.charset = 'utf-8';\n  script.src = url;\n  if (callback) {\n    script.onload = script.onreadystatechange = function() {\n      if (!r && (!this.readyState || this.readyState == 'complete')) {\n        r = true;\n        callback();\n      }\n    };\n  }\n  head.appendChild(script);\n};\n(function() {\n  if (window.location.search.search(\"excludeform\") !== -1) return false;\n  var getCookie = function(name) {\n    var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)'));\n    return match ? match[2] : null;\n  }\n  var setCookie = function(name, value) {\n    var now = new Date();\n    var time = now.getTime();\n    var expireTime = time + 1000 * 60 * 60 * 24 * 365;\n    now.setTime(expireTime);\n    document.cookie = name + '=' + value + '; expires=' + now + ';path=\/';\n  }\n      var addEvent = function(element, event, func) {\n    if (element.addEventListener) {\n      element.addEventListener(event, func);\n    } else {\n      var oldFunc = element['on' + event];\n      element['on' + event] = function() {\n        oldFunc.apply(this, arguments);\n        func.apply(this, arguments);\n      };\n    }\n  }\n  var _removed = false;\n  var form_to_submit = document.getElementById('_form_57_');\n  var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false;\n\n  var getUrlParam = function(name) {\n    var regexStr = '[\\?&]' + name + '=([^&#]*)';\n    var results = new RegExp(regexStr, 'i').exec(window.location.href);\n    return results != undefined ? decodeURIComponent(results[1]) : false;\n  };\n\n  for (var i = 0; i < allInputs.length; i++) {\n    var regexStr = \"field\\\\[(\\\\d+)\\\\]\";\n    var results = new RegExp(regexStr).exec(allInputs[i].name);\n    if (results != undefined) {\n      allInputs[i].dataset.name = window.cfields[results[1]];\n    } else {\n      allInputs[i].dataset.name = allInputs[i].name;\n    }\n    var fieldVal = getUrlParam(allInputs[i].dataset.name);\n\n    if (fieldVal) {\n      if (allInputs[i].dataset.autofill === \"false\") {\n        continue;\n      }\n      if (allInputs[i].type == \"radio\" || allInputs[i].type == \"checkbox\") {\n        if (allInputs[i].value == fieldVal) {\n          allInputs[i].checked = true;\n        }\n      } else {\n        allInputs[i].value = fieldVal;\n      }\n    }\n  }\n\n  var remove_tooltips = function() {\n    for (var i = 0; i < tooltips.length; i++) {\n      tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);\n    }\n    tooltips = [];\n  };\n  var remove_tooltip = function(elem) {\n    for (var i = 0; i < tooltips.length; i++) {\n      if (tooltips[i].elem === elem) {\n        tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);\n        tooltips.splice(i, 1);\n        return;\n      }\n    }\n  };\n  var create_tooltip = function(elem, text) {\n    var tooltip = document.createElement('div'), arrow = document.createElement('div'), inner = document.createElement('div'), new_tooltip = {};\n    if (elem.type != 'radio' &#038;&#038; elem.type != 'checkbox') {\n      tooltip.className = '_error';\n      arrow.className = '_error-arrow';\n      inner.className = '_error-inner';\n      inner.innerHTML = text;\n      tooltip.appendChild(arrow);\n      tooltip.appendChild(inner);\n      elem.parentNode.appendChild(tooltip);\n    } else {\n      tooltip.className = '_error-inner _no_arrow';\n      tooltip.innerHTML = text;\n      elem.parentNode.insertBefore(tooltip, elem);\n      new_tooltip.no_arrow = true;\n    }\n    new_tooltip.tip = tooltip;\n    new_tooltip.elem = elem;\n    tooltips.push(new_tooltip);\n    return new_tooltip;\n  };\n  var resize_tooltip = function(tooltip) {\n    var rect = tooltip.elem.getBoundingClientRect();\n    var doc = document.documentElement, scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop)  - (doc.clientTop || 0));\n    if (scrollPosition < 40) {\n      tooltip.tip.className = tooltip.tip.className.replace(\/ ?(_above|_below) ?\/g, '') + ' _below';\n    } else {\n      tooltip.tip.className = tooltip.tip.className.replace(\/ ?(_above|_below) ?\/g, '') + ' _above';\n    }\n  };\n  var resize_tooltips = function() {\n    if (_removed) return;\n    for (var i = 0; i < tooltips.length; i++) {\n      if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]);\n    }\n  };\n  var validate_field = function(elem, remove) {\n    var tooltip = null, value = elem.value, no_error = true;\n    remove ? remove_tooltip(elem) : false;\n    if (elem.type != 'checkbox') elem.className = elem.className.replace(\/ ?_has_error ?\/g, '');\n    if (elem.getAttribute('required') !== null) {\n      if (elem.type == 'radio' || (elem.type == 'checkbox' &#038;&#038; \/any\/.test(elem.className))) {\n        var elems = form_to_submit.elements[elem.name];\n        if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) {\n          no_error = elem.checked;\n        }\n        else {\n          no_error = false;\n          for (var i = 0; i < elems.length; i++) {\n            if (elems[i].checked) no_error = true;\n          }\n        }\n        if (!no_error) {\n          tooltip = create_tooltip(elem, \"Por favor, selecione uma op\u00e7\u00e3o.\");\n        }\n      } else if (elem.type =='checkbox') {\n        var elems = form_to_submit.elements[elem.name], found = false, err = [];\n        no_error = true;\n        for (var i = 0; i < elems.length; i++) {\n          if (elems[i].getAttribute('required') === null) continue;\n          if (!found &#038;&#038; elems[i] !== elem) return true;\n          found = true;\n          elems[i].className = elems[i].className.replace(\/ ?_has_error ?\/g, '');\n          if (!elems[i].checked) {\n            no_error = false;\n            elems[i].className = elems[i].className + ' _has_error';\n            err.push(\"Marcar %s \u00e9 necess\u00e1rio\".replace(\"%s\", elems[i].value));\n          }\n        }\n        if (!no_error) {\n          tooltip = create_tooltip(elem, err.join('<br\/>'));\n        }\n      } else if (elem.tagName == 'SELECT') {\n        var selected = true;\n        if (elem.multiple) {\n          selected = false;\n          for (var i = 0; i < elem.options.length; i++) {\n            if (elem.options[i].selected) {\n              selected = true;\n              break;\n            }\n          }\n        } else {\n          for (var i = 0; i < elem.options.length; i++) {\n            if (elem.options[i].selected &#038;&#038; !elem.options[i].value) {\n              selected = false;\n            }\n          }\n        }\n        if (!selected) {\n          elem.className = elem.className + ' _has_error';\n          no_error = false;\n          tooltip = create_tooltip(elem, \"Por favor, selecione uma op\u00e7\u00e3o.\");\n        }\n      } else if (value === undefined || value === null || value === '') {\n        elem.className = elem.className + ' _has_error';\n        no_error = false;\n        tooltip = create_tooltip(elem, \"Este campo \u00e9 necess\u00e1rio.\");\n      }\n    }\n    if (no_error &#038;&#038; elem.name == 'email') {\n      if (!value.match(\/^[\\+_a-z0-9-'&#038;=]+(\\.[\\+_a-z0-9-']+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,})$\/i)) {\n        elem.className = elem.className + ' _has_error';\n        no_error = false;\n        tooltip = create_tooltip(elem, \"Digite um e-mail v\u00e1lido\");\n      }\n    }\n    if (no_error &#038;&#038; \/date_field\/.test(elem.className)) {\n      if (!value.match(\/^\\d\\d\\d\\d-\\d\\d-\\d\\d$\/)) {\n        elem.className = elem.className + ' _has_error';\n        no_error = false;\n        tooltip = create_tooltip(elem, \"Digite uma data v\u00e1lida.\");\n      }\n    }\n    tooltip ? resize_tooltip(tooltip) : false;\n    return no_error;\n  };\n  var needs_validate = function(el) {\n        if(el.getAttribute('required') !== null){\n            return true\n        }\n        if(el.name === 'email' &#038;&#038; el.value !== \"\"){\n            return true\n        }\n        return false\n  };\n  var validate_form = function(e) {\n    var err = form_to_submit.querySelector('._form_error'), no_error = true;\n    if (!submitted) {\n      submitted = true;\n      for (var i = 0, len = allInputs.length; i < len; i++) {\n        var input = allInputs[i];\n        if (needs_validate(input)) {\n          if (input.type == 'text') {\n            addEvent(input, 'blur', function() {\n              this.value = this.value.trim();\n              validate_field(this, true);\n            });\n            addEvent(input, 'input', function() {\n              validate_field(this, true);\n            });\n          } else if (input.type == 'radio' || input.type == 'checkbox') {\n            (function(el) {\n              var radios = form_to_submit.elements[el.name];\n              for (var i = 0; i < radios.length; i++) {\n                addEvent(radios[i], 'click', function() {\n                  validate_field(el, true);\n                });\n              }\n            })(input);\n          } else if (input.tagName == 'SELECT') {\n            addEvent(input, 'change', function() {\n              validate_field(this, true);\n            });\n          } else if (input.type == 'textarea'){\n            addEvent(input, 'input', function() {\n              validate_field(this, true);\n            });\n          }\n        }\n      }\n    }\n    remove_tooltips();\n    for (var i = 0, len = allInputs.length; i < len; i++) {\n      var elem = allInputs[i];\n      if (needs_validate(elem)) {\n        if (elem.tagName.toLowerCase() !== \"select\") {\n          elem.value = elem.value.trim();\n        }\n        validate_field(elem) ? true : no_error = false;\n      }\n    }\n    if (!no_error &#038;&#038; e) {\n      e.preventDefault();\n    }\n    resize_tooltips();\n    return no_error;\n  };\n  addEvent(window, 'resize', resize_tooltips);\n  addEvent(window, 'scroll', resize_tooltips);\n  window._old_serialize = null;\n  if (typeof serialize !== 'undefined') window._old_serialize = window.serialize;\n  _load_script(\"\/\/d3rxaij56vjege.cloudfront.net\/form-serialize\/0.3\/serialize.min.js\", function() {\n    window._form_serialize = window.serialize;\n    if (window._old_serialize) window.serialize = window._old_serialize;\n  });\n  var form_submit = function(e) {\n    e.preventDefault();\n    if (validate_form()) {\n      \/\/ use this trick to get the submit button &#038; disable it using plain javascript\n      document.querySelector('#_form_57_submit').disabled = true;\n            var serialized = _form_serialize(document.getElementById('_form_57_'));\n      var err = form_to_submit.querySelector('._form_error');\n      err ? err.parentNode.removeChild(err) : false;\n      _load_script('https:\/\/ziguifrid.activehosted.com\/proc.php?' + serialized + '&#038;jsonp=true');\n    }\n    return false;\n  };\n  addEvent(form_to_submit, 'submit', form_submit);\n})();\n\n<\/script>\n\n\n\n<p><\/p>\n\n\n\n<p>Fonte: <a href=\"https:\/\/docs.spring.io\/spring-boot\/docs\/2.3.1.RELEASE\/reference\/html\/getting-started.html#getting-started-first-application\">https:\/\/docs.spring.io\/spring-boot\/docs\/2.3.1.RELEASE\/reference\/html\/getting-started.html#getting-started-first-application<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vamos rever os arquivos que criamos: pom.xml O arquivo Example.java deve ficar na pasta src\/main\/java.Example.java. Example.java Nesse ponto a aplica\u00e7\u00e3o deve estar funcionando. Desde que voc\u00ea usou o spring-boot-starter-parent POM, voc\u00ea tem que usar o run para executar a aplica\u00e7\u00e3o. Execute o comando mvn spring-boot:run e voc\u00ea deve ver algo do tipo: Se voc\u00ea abrir [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":60,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-950","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-springboot"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.5 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Introdu\u00e7\u00e3o ao Spring Boot #4 - 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\/introducao-ao-spring-boot-4\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introdu\u00e7\u00e3o ao Spring Boot #4\" \/>\n<meta property=\"og:description\" content=\"Vamos rever os arquivos que criamos: pom.xml O arquivo Example.java deve ficar na pasta src\/main\/java.Example.java. Example.java Nesse ponto a aplica\u00e7\u00e3o deve estar funcionando. Desde que voc\u00ea usou o spring-boot-starter-parent POM, voc\u00ea tem que usar o run para executar a aplica\u00e7\u00e3o. Execute o comando mvn spring-boot:run e voc\u00ea deve ver algo do tipo: Se voc\u00ea abrir [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/\" \/>\n<meta property=\"og:site_name\" content=\"Viciados em Aprender\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-22T14:54:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-24T03:50:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/06\/1_8lBam7TNgtjy8Ne5EkP54A.png\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"blackzig\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"blackzig\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/\"},\"author\":{\"name\":\"blackzig\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"headline\":\"Introdu\u00e7\u00e3o ao Spring Boot #4\",\"datePublished\":\"2020-06-22T14:54:28+00:00\",\"dateModified\":\"2020-06-24T03:50:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/\"},\"wordCount\":423,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/687a6d17428a0f0e040aefbd858ebc1e\"},\"image\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/1_8lBam7TNgtjy8Ne5EkP54A.png\",\"articleSection\":[\"Spring Boot\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/\",\"name\":\"Introdu\u00e7\u00e3o ao Spring Boot #4 - Viciados em Aprender\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/1_8lBam7TNgtjy8Ne5EkP54A.png\",\"datePublished\":\"2020-06-22T14:54:28+00:00\",\"dateModified\":\"2020-06-24T03:50:58+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/#primaryimage\",\"url\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/1_8lBam7TNgtjy8Ne5EkP54A.png\",\"contentUrl\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/1_8lBam7TNgtjy8Ne5EkP54A.png\",\"width\":700,\"height\":400,\"caption\":\"spring boot\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/introducao-ao-spring-boot-4\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/micheladrianomedeiros.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introdu\u00e7\u00e3o ao Spring Boot #4\"}]},{\"@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":"Introdu\u00e7\u00e3o ao Spring Boot #4 - 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\/introducao-ao-spring-boot-4\/","og_locale":"pt_PT","og_type":"article","og_title":"Introdu\u00e7\u00e3o ao Spring Boot #4","og_description":"Vamos rever os arquivos que criamos: pom.xml O arquivo Example.java deve ficar na pasta src\/main\/java.Example.java. Example.java Nesse ponto a aplica\u00e7\u00e3o deve estar funcionando. Desde que voc\u00ea usou o spring-boot-starter-parent POM, voc\u00ea tem que usar o run para executar a aplica\u00e7\u00e3o. Execute o comando mvn spring-boot:run e voc\u00ea deve ver algo do tipo: Se voc\u00ea abrir [&hellip;]","og_url":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/","og_site_name":"Viciados em Aprender","article_published_time":"2020-06-22T14:54:28+00:00","article_modified_time":"2020-06-24T03:50:58+00:00","og_image":[{"width":700,"height":400,"url":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/06\/1_8lBam7TNgtjy8Ne5EkP54A.png","type":"image\/png"}],"author":"blackzig","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"blackzig","Tempo estimado de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/#article","isPartOf":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/"},"author":{"name":"blackzig","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"headline":"Introdu\u00e7\u00e3o ao Spring Boot #4","datePublished":"2020-06-22T14:54:28+00:00","dateModified":"2020-06-24T03:50:58+00:00","mainEntityOfPage":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/"},"wordCount":423,"commentCount":0,"publisher":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#\/schema\/person\/687a6d17428a0f0e040aefbd858ebc1e"},"image":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/#primaryimage"},"thumbnailUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/06\/1_8lBam7TNgtjy8Ne5EkP54A.png","articleSection":["Spring Boot"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/","name":"Introdu\u00e7\u00e3o ao Spring Boot #4 - Viciados em Aprender","isPartOf":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/#primaryimage"},"image":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/#primaryimage"},"thumbnailUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/06\/1_8lBam7TNgtjy8Ne5EkP54A.png","datePublished":"2020-06-22T14:54:28+00:00","dateModified":"2020-06-24T03:50:58+00:00","breadcrumb":{"@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/#primaryimage","url":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/06\/1_8lBam7TNgtjy8Ne5EkP54A.png","contentUrl":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-content\/uploads\/2019\/06\/1_8lBam7TNgtjy8Ne5EkP54A.png","width":700,"height":400,"caption":"spring boot"},{"@type":"BreadcrumbList","@id":"https:\/\/micheladrianomedeiros.com.br\/blog\/introducao-ao-spring-boot-4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/micheladrianomedeiros.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Introdu\u00e7\u00e3o ao Spring Boot #4"}]},{"@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\/950","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=950"}],"version-history":[{"count":6,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/950\/revisions"}],"predecessor-version":[{"id":969,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/posts\/950\/revisions\/969"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media\/60"}],"wp:attachment":[{"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/media?parent=950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/categories?post=950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/micheladrianomedeiros.com.br\/blog\/wp-json\/wp\/v2\/tags?post=950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}