{"id":721,"date":"2016-04-16T15:59:59","date_gmt":"2016-04-16T18:59:59","guid":{"rendered":"https:\/\/www.semeru.com.br\/blog\/?p=721"},"modified":"2022-12-21T10:51:29","modified_gmt":"2022-12-21T13:51:29","slug":"do-zero-ao-rest-em-5-minutos-com-springboot","status":"publish","type":"post","link":"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/","title":{"rendered":"Do zero ao REST em 5 minutos com SpringBoot"},"content":{"rendered":"<p>Este post visa explicar de forma simples como criar um <em>&#8220;hello world&#8221;<\/em> <strong>RESTFul web service com Spring Boot<\/strong>.<\/p>\n<p>Fique ligado no blog, por que, como j\u00e1 foi dito, nos pr\u00f3ximos 2 posts entraremos em maiores detalhes sobre a sopa de letrinhas dos verbos REST, POST, PUT, GET e DELETE na pr\u00e1tica e depois documentaremos a nossa API com o framewrok Swagger. E abordagem nesses posts ser\u00e1 totalmente m\u00e3o na massa. \u00c9 isso a\u00ed bons estudos.<\/p>\n<ul>\n<li><strong>Cerca de 5 minutos<\/strong><\/li>\n<li><strong>Qualquer IDE de prefer\u00eancia o Eclipse<\/strong><\/li>\n<li><strong>JDK 1.8 ou superior<\/strong><\/li>\n<li><strong>Maven 3.33+<\/strong><\/li>\n<\/ul>\n<p><strong>Onde baixar os c\u00f3digos do projeto <\/strong><\/p>\n<p>Voc\u00ea pode <a href=\"https:\/\/github.com\/leandrocgsi\/simple-rest-example\/archive\/master.zip\">baixar o c\u00f3digo aqui<\/a> e descompactar o arquivo zip e importar n\u00e3o sua IDE de preferencia ou clonar usando Git:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ngit clone https:\/\/github.com\/leandrocgsi\/simple-rest-example.git\n<\/pre>\n<p>Para mais detalhes e para evoluir este projeto acesse <a href=\"https:\/\/spring.io\/guides\">a p\u00e1gina de guias de inicializa\u00e7\u00e3o da funda\u00e7\u00e3o Spring<\/a>. Al\u00e9m disso ser\u00e3o feitos mais 2 posts fechando uma s\u00e9rie sobre Spring Boot e RESTful abordando os 4 principais verbos REST e como documentar API&#8217;s com o framework Swagger. O c\u00f3digo dos pr\u00f3ximos posts j\u00e1 est\u00e1 implementado e voc\u00ea pode acessar <a href=\"https:\/\/github.com\/leandrocgsi\/simple-rest-example-verbs\">o de verbos aqui<\/a> e o <a href=\"https:\/\/github.com\/leandrocgsi\/simple-rest-example-swagger\">com Swagger aqui<\/a>.<\/p>\n<p><strong>E a teoria como fica?<\/strong><\/p>\n<p>Se voc\u00ea est\u00e1 lendo este post eu acredito que voc\u00ea conhe\u00e7a o m\u00ednimo de teoria sobre REST e Web-Services mas se n\u00e3o conhece temos 3 posts que abordam esses temas de forma te\u00f3rica sendo um sobre <a href=\"https:\/\/www.semeru.com.br\/blog\/web-services\/\">Web Services<\/a>, outro sobre <a href=\"https:\/\/www.semeru.com.br\/blog\/restful-web-services\/\">RESTful Web Services<\/a> e outro sobre os <a href=\"https:\/\/www.semeru.com.br\/blog\/http-status-codes-em-servicos-rest\/\">HTTP Status Codes em Servi\u00e7os REST<\/a> mais comuns.<\/p>\n<p><strong>Hora de codar<\/strong><\/p>\n<p>Ent\u00e3o chega de conversa e vamos botar a m\u00e3o na massa ou melhor no c\u00f3digo. Com o Eclipse aberto clique em novo escolha a op\u00e7\u00e3o <strong>Maven Project<\/strong> como na imagem abaixo.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/1\/\" rel=\"attachment wp-att-722\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-722\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/1.png\" alt=\"1\" width=\"502\" height=\"328\" srcset=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/1.png 502w, https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/1-300x196.png 300w\" sizes=\"(max-width: 502px) 100vw, 502px\" \/><\/a><\/p>\n<p>Na pr\u00f3xima janela selecione a op\u00e7\u00e3o <em><strong>&#8220;Create a simple project(skyp archetype selection)&#8221;<\/strong><\/em>. Isso &#8220;diz&#8221; ao <strong>Maven <\/strong>que voc\u00ea ir\u00e1 construir seu projeto do zero com uma estrutura padr\u00e3o <strong>Maven <\/strong>mas sem usar nenhum <strong>Archetype<\/strong> pronto.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/2\/\" rel=\"attachment wp-att-723\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-723\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/2.png\" alt=\"2\" width=\"815\" height=\"745\"><\/a><\/p>\n<p>Na pr\u00f3xima tela defina o Goup Id do seu projeto, no nosso caso <strong><em>&#8220;br.com.erudio&#8221;<\/em><\/strong>. Defina tamb\u00e9m o <strong>Artifact Id<\/strong> (nome) do seu projeto e a vers\u00e3o. Feito isto clique em next.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/3\/\" rel=\"attachment wp-att-724\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-724\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/3.png\" alt=\"3\" width=\"815\" height=\"745\"><\/a><\/p>\n<p>Se tudo tiver corrido bem voc\u00ea ter\u00e1 um projeto com uma estrutura similar \u00e0 imagem abaixo. Abra o arquivo &#8220;pom.xml&#8221; e vamos fazer algumas altera\u00e7\u00f5es nele.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/4\/\" rel=\"attachment wp-att-725\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-725\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/4.png\" alt=\"4\" width=\"317\" height=\"263\" srcset=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/4.png 317w, https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/4-300x249.png 300w\" sizes=\"(max-width: 317px) 100vw, 317px\" \/><\/a><\/p>\n<p>A estrutura original do pom deve ser algo similar a esta:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;project xmlns=&quot;http:\/\/maven.apache.org\/POM\/4.0.0&quot; xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot; xsi:schemalocation=&quot;http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd&quot;&gt;\n    &lt;modelversion&gt;4.0.0&lt;\/modelversion&gt;\n\n    &lt;groupid&gt;br.com.erudio&lt;\/groupid&gt;\n    &lt;artifactid&gt;simple-rest-example&lt;\/artifactid&gt;\n    &lt;version&gt;0.0.1-SNAPSHOT&lt;\/version&gt;\n\n&lt;\/project&gt;\n<\/pre>\n<p>Primeiro informamos o &#8220;parentesco&#8221; do nosso projeto em rela\u00e7\u00e3o ao <strong>Spring boot<\/strong>. Logo abaixo adicionamos a depend\u00eancia do <strong>Spring Boot Starter Web<\/strong> que como o pr\u00f3prio nome diz \u00e9 o respons\u00e1vel por inicializar nossa aplica\u00e7\u00e3o. Definimos tamb\u00e9m a vers\u00e3o do <strong>Java<\/strong> no nosso caso <strong>1.8<\/strong>. Depois precisamos configurar o processo de build que \u00e9 extremamente simples. E por fim adicionamos os reposit\u00f3rios de onde o <strong>Maven<\/strong> ir\u00e1 baixar as depend\u00eancias e plug-ins necess\u00e1rios ao projeto. Feito isso nos j\u00e1 temos a <em>estrutura b\u00e1sica de um projeto <strong>Spring Boot<\/strong><\/em>.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;project xmlns=&quot;http:\/\/maven.apache.org\/POM\/4.0.0&quot; xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot; xsi:schemalocation=&quot;http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd&quot;&gt;\n    &lt;modelversion&gt;4.0.0&lt;\/modelversion&gt;\n\n    &lt;groupid&gt;br.com.erudio&lt;\/groupid&gt;\n    &lt;artifactid&gt;simple-rest-example&lt;\/artifactid&gt;\n    &lt;version&gt;0.0.1-SNAPSHOT&lt;\/version&gt;\n\n    &lt;!-- Adicionando o Spring Boot ao projeto --&gt;\n    &lt;parent&gt;\n        &lt;groupid&gt;org.springframework.boot&lt;\/groupid&gt;\n        &lt;artifactid&gt;spring-boot-starter-parent&lt;\/artifactid&gt;\n        &lt;version&gt;1.3.3.RELEASE&lt;\/version&gt;\n    &lt;\/parent&gt;\n\n    &lt;!-- Adicionando a dependencia do Spring Boot Starter Web --&gt;\n    &lt;dependencies&gt;\n        &lt;dependency&gt;\n            &lt;groupid&gt;org.springframework.boot&lt;\/groupid&gt;\n            &lt;artifactid&gt;spring-boot-starter-web&lt;\/artifactid&gt;\n        &lt;\/dependency&gt;\n    &lt;\/dependencies&gt;\n\n    &lt;!-- Configurando a vers\u00e3o do Java --&gt;\n    &lt;properties&gt;\n        &lt;java.version&gt;1.8&lt;\/java.version&gt;\n    &lt;\/properties&gt;\n\n    &lt;!-- Configurando o processo de build da aplica\u00e7\u00e3o --&gt;\n    &lt;build&gt;\n        &lt;plugins&gt;\n            &lt;plugin&gt;\n                &lt;groupid&gt;org.springframework.boot&lt;\/groupid&gt;\n                &lt;artifactid&gt;spring-boot-maven-plugin&lt;\/artifactid&gt;\n            &lt;\/plugin&gt;\n        &lt;\/plugins&gt;\n    &lt;\/build&gt;\n\n    &lt;!-- Adicionando o reposit\u00f3rio do Spring de onde o Maven ir\u00e1 baixar as depend\u00eancias --&gt;\n    &lt;repositories&gt;\n        &lt;repository&gt;\n            &lt;id&gt;spring-releases&lt;\/id&gt;\n            &lt;url&gt;https:\/\/repo.spring.io\/libs-release&lt;\/url&gt;\n        &lt;\/repository&gt;\n    &lt;\/repositories&gt;\n\n    &lt;!-- Adicionando o reposit\u00f3rio do Spring de onde o Maven ir\u00e1 baixar os plugins --&gt;\n    &lt;pluginrepositories&gt;\n        &lt;pluginrepository&gt;\n            &lt;id&gt;spring-releases&lt;\/id&gt;\n            &lt;url&gt;https:\/\/repo.spring.io\/libs-release&lt;\/url&gt;\n        &lt;\/pluginrepository&gt;\n    &lt;\/pluginrepositories&gt;\n\n&lt;\/project&gt;\n<\/pre>\n<p>Como se pode ver o nosso projeto est\u00e1 com um marker de erro e a vers\u00e3o do Java est\u00e1 como 1.5 e n\u00e3o 1.8 como definimos no pom.xml.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/7-3\/\" rel=\"attachment wp-att-726\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-726\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/7.png\" alt=\"7\" width=\"429\" height=\"287\" srcset=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/7.png 429w, https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/7-300x201.png 300w\" sizes=\"(max-width: 429px) 100vw, 429px\" \/><\/a><\/p>\n<p>Clique com o direito sobre o projeto escola a op\u00e7\u00e3o Build Path &gt;&gt; Configure Build Path<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/8-2\/\" rel=\"attachment wp-att-727\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-727\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/8.png\" alt=\"8\" width=\"815\" height=\"250\"><\/a><\/p>\n<p>Na aba libraries selecione sua JRE System Library e clique em editar.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/9-2\/\" rel=\"attachment wp-att-728\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-728\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/9.png\" alt=\"9\" width=\"815\" height=\"525\"><\/a><\/p>\n<p>Na proxima janela selecione o radio Alternate JRE e escolha sua vers\u00e3o do Java e clique em Finish.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/10-2\/\" rel=\"attachment wp-att-729\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-729\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/10.png\" alt=\"10\" width=\"815\" height=\"650\"><\/a><\/p>\n<p>Como se pode ver agora a vers\u00e3o esta correta, ent\u00e3o clique em OK.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/11-2\/\" rel=\"attachment wp-att-730\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-730\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/11.png\" alt=\"11\" width=\"815\" height=\"650\"><\/a><\/p>\n<p>Al\u00e9m disso temos um Mavem problem etratanto isso \u00e9 apenas um bug do Eclipse e apesar do warning o projeto executa normalmente. Para remover basta escolher a op\u00e7\u00e3o quick fix.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/12\/\" rel=\"attachment wp-att-731\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-731\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/12.png\" alt=\"12\" width=\"531\" height=\"400\"><\/a><\/p>\n<p>Na janela a seguir escolha a op\u00e7\u00e3o Update project configuration clique em Finish e adeus warning.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/13-2\/\" rel=\"attachment wp-att-732\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-732\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/13.png\" alt=\"13\" width=\"815\" height=\"710\"><\/a><\/p>\n<p>Agora que eliminamos todos os warnings o ambiente est\u00e1 pronto. Selecione o source folder src\/main\/java.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/14-2\/\" rel=\"attachment wp-att-733\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-733\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/14.png\" alt=\"14\" width=\"425\" height=\"288\" srcset=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/14.png 425w, https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/14-300x203.png 300w\" sizes=\"(max-width: 425px) 100vw, 425px\" \/><\/a><\/p>\n<p>Clique com o direito New &gt;&gt; Package<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/15\/\" rel=\"attachment wp-att-734\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-734\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/15.png\" alt=\"15\" width=\"815\" height=\"200\"><\/a><\/p>\n<p>Na pr\u00f3xima janela defina o nome do pacote no nosso caso &#8220;br.com.erudio&#8221;.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/16\/\" rel=\"attachment wp-att-735\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-735\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/16.png\" alt=\"16\" width=\"815\" height=\"370\"><\/a><\/p>\n<p>Feito isso abra o souce folder e clicando sobre o pacote com o bot\u00e3o direito New &gt;&gt; Class<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/17\/\" rel=\"attachment wp-att-736\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-736\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/17.png\" alt=\"17\" width=\"815\" height=\"250\"><\/a><\/p>\n<p>Na pr\u00f3xima janela defina o nome Greeting(Sauda\u00e7\u00e3o em ingl\u00eas j\u00e1 que \u00e9 um Hello World) e insira o c\u00f3digo abaixo. Como voc\u00ea pode perceber \u00e9 um simples POJO que representa o objeto que ser\u00e1 retornado aos clientes de nossa API.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\npackage br.com.erudio;\n\npublic class Greeting {\n\n    private final long id;\n    private final String content;\n\n    public Greeting(long id, String content) {\n        this.id = id;\n        this.content = content;\n    }\n\n    public long getId() {\n        return id;\n    }\n\n    public String getContent() {\n        return content;\n    }\n}\n\n<\/pre>\n<p>Agora crie uma nova classe com o nome GreetingController que \u00e9 o nosso endpoit que receber\u00e1 as requisi\u00e7\u00f5es REST. Como se pode ver as requisi\u00e7\u00f5es para a url {{contexto}}\/greeting invocar\u00e3o o m\u00e9todo greeting que recebe um @RequestParam com um nome. Quando esse valor n\u00e3o \u00e9 informado o valor padr\u00e3o \u00e9 &#8220;World&#8221;. As requisi\u00e7\u00f5es para esse endpoint retornam uma sauda\u00e7\u00e3o com um id autom\u00e1tico simulando um acesso a um banco de dados e uma string com a sauda\u00e7\u00e3o.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\npackage br.com.erudio;\n\nimport java.util.concurrent.atomic.AtomicLong;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\npublic class GreetingController {\n\n    private static final String template = &quot;Hello, %s!&quot;;\n    private final AtomicLong counter = new AtomicLong();\n\n    @RequestMapping(&quot;\/greeting&quot;)\n    public Greeting greeting(@RequestParam(value=&quot;name&quot;, defaultValue=&quot;World&quot;) String name) {\n        return new Greeting(counter.incrementAndGet(), String.format(template, name));\n    }\n}\n\n<\/pre>\n<p>Agora vamos definir a classe de inicializa\u00e7\u00e3o de nossa aplica\u00e7\u00e3o chamada Application. Acredite ou n\u00e3o com apenas o trecho de c\u00f3digo abaixo voc\u00ea tem sua aplica\u00e7\u00e3o pronta sem necessidade de container ou server. Sim o Spring Boot te liberta de Tomcat, Jetty ou os &#8220;obesos&#8221; JBoss e GlassFish e seus EJB&#8217;s.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\npackage br.com.erudio;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class Application {\n\n    public static void main(String[] args) {\n        SpringApplication.run(Application.class, args);\n    }\n}\n\n<\/pre>\n<p>Com a aplica\u00e7\u00e3o pronta clique com o direito dobre a classe Application Run As &gt;&gt; Java Application. Caso voc\u00ea esteja usando a Spring Source Tool Suite (ferramenta baseada no Eclipse com foco em desenvolvimento Spring) como \u00e9 o meu caso pode excolher a op\u00e7\u00e3o Spring Boot App.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/18\/\" rel=\"attachment wp-att-737\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-737\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/18.png\" alt=\"18\" width=\"815\" height=\"300\"><\/a><\/p>\n<p>Se voc\u00ea tiver feito tudo corretamente ter\u00e1 um console parecido com a imagem abaixo observe que o endpoint \/greeting foi mapeado e que nossa aplica\u00e7\u00e3o iniciou em apenas 4 segundos.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/19\/\" rel=\"attachment wp-att-738\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-738\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/19.png\" alt=\"19\" width=\"815\" height=\"400\"><\/a><\/p>\n<p>V\u00e1 no browser de sua preferencia e acesse localhost:8080\/greeting e ter\u00e1 uma resposta parecida com a imagem abaixo.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/20\/\" rel=\"attachment wp-att-739\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-739\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/20.png\" alt=\"20\" width=\"270\" height=\"115\"><\/a><\/p>\n<p>Agora adicione um parametro a mais a nossa url localhost:8080\/greeting?name=Ol\u00e1 Semeru Blog ou outro parametro de sua prefer\u00eancia e ter\u00e1 uma resposta similar \u00e0 imagem abaixo.<\/p>\n<p><a href=\"https:\/\/www.semeru.com.br\/blog\/do-zero-ao-rest-em-5-minutos-com-springboot\/attachment\/21\/\" rel=\"attachment wp-att-740\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-740\" src=\"https:\/\/www.semeru.com.br\/blog\/wp-content\/uploads\/2016\/04\/21.png\" alt=\"21\" width=\"370\" height=\"105\"><\/a><\/p>\n<p>Fique ligado no blog, por que, como j\u00e1 foi dito, nos pr\u00f3ximos 2 posts entraremos em maiores detalhes sobre a sopa de letrinhas dos verbos REST, POST, PUT, GET e DELETE na pr\u00e1tica e depois documentaremos a nossa API com o framewrok Swagger. E abordagem nesses posts ser\u00e1 totalmente m\u00e3o na massa. \u00c9 isso a\u00ed bons estudos.<\/p>\n<h2>Treinamentos relacionados com este post<\/h2>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\"><\/p>\n<p><img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices_java\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microservices do 0 com Spring Cloud, Spring Boot e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/14-microservices-java.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_kotlin\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 AWS com Spring Boot 3, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/18-rest-spring-kotlin.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ms_kotlin\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microsservi\u00e7os do 0 com Spring Cloud, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/22-ms-kotlin.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker do 0 \u00e0 Maestria: Cont\u00eaineres Desmistificados mais 3 B\u00d4NUS\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/09-docker.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker_para_aws\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker para Amazon AWS Implante Apps Java e .NET com Travis CI\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/10-docker-to-aws.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_kotlin\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Kotlin para DEVs Java: Aprenda a Linguagem Padr\u00e3o do Android\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/20-kotlin.png\"><br \/>\n<\/a><\/p>\n<div align=\"right\"><div class=\"sharexyWidgetNoindexUniqueClassName\"><div id=\"shr_92833714\"><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Este post visa explicar de forma simples como criar um &#8220;hello world&#8221; RESTFul web service com Spring Boot. Fique ligado no blog, por que, como j\u00e1 foi dito, nos pr\u00f3ximos 2 posts entraremos em maiores detalhes sobre a sopa de letrinhas dos verbos REST, POST, PUT, GET e DELETE na pr\u00e1tica e depois documentaremos a [&#8230;]<\/p>\n<div align=\"right\">\n<div class=\"sharexyWidgetNoindexUniqueClassName\">\n<div id=\"shr_92833714\"><\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[116,63,208],"tags":[204,161,210],"_links":{"self":[{"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/posts\/721"}],"collection":[{"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/comments?post=721"}],"version-history":[{"count":46,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/posts\/721\/revisions"}],"predecessor-version":[{"id":1518,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/posts\/721\/revisions\/1518"}],"wp:attachment":[{"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/media?parent=721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/categories?post=721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.semeru.com.br\/blog\/wp-json\/wp\/v2\/tags?post=721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}