Spring Boot — Getting Started
Tags: java, beginners, webdev, tutorial
Published: 2020-06-23 16:56:06

Spring boot is one of the popular Java framework, which under the hood comprises of multiple Spring based Java projects at its core. Spring boot helps to get started with stand-alone Spring based applications with minimal coding.

Spring boot provides an Embedded Tomcat, Jetty or Undertow runtime environments for the jar/war to run as stand-alone applications along with many other useful features.

Web applications are developed at a faster phase using Spring boot owing to its inherent support for simplifying web development.

Let’s create an web application hosting an API end point with returns the text ***Hello World !!*** as the response.

## Spring Initilizr

The starter website (https://start.spring.io/) helps to add dependencies and make additional configuration through an interactive interface.

The options selected for generating this project is shown below in the image.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/eseyfy48p1wjtf29wb62.png)

***Spring Web*** is the only dependency that is required to get started. *Sweet isn’t it !!!*


You can click on ***Expolore*** to see the file structure which will be downloaded. Clicking on ***Generate*** button downloads a *<Name>.zip* file which contains all the boiler plate files needed to run the code.

The *pom.xml* should look similar to this

{% gist https://gist.github.com/iamTheL/221f9432cfc3d1df8e121b9d85a969f2 %}

## IDE

My preferred choice of IDE is IntelliJ, other IDE’s like Eclipse, NetBeans, etc. are also good enough to get started. After extracting the zip file the Maven project can now be imported into the IDE.


## Pre Requisites
    * Java 11
    * Maven


## Digging In

Once you have imported the project to an IDE the project structure looks similar to this.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bfubhwikpqoa6hiiensu.png)

* *src/* contains the source code along with resources and tests
* *main/* contains the actual source code and additional resources
* *test/* contains the test cases and test suites

The main method is placed in the file

    `SpringBootHelloWorldApplication.java`

which gets executed upon starting the application. The ***@SpringBootApplication*** annotation abstracts a lot ( (╯°□°)╯︵ ┻━┻ ) of the default configurations which otherwise needs to be set up for the web app to run.

## First Light

Now lets create our first API end point. Create a class named

`HelloWorldController.java`

and add the following piece of code to it

{% gist https://gist.github.com/iamTheL/a5d26c460aaefbd8fc4f92e1b989b4de %}


## Explanation

> @RestController — a special annotation which says that this class contains the terminating end points, in this case /hello

> @GetMapping — this annotation is written on top of a method which needs to be executed when /hello is requested from the client through the GET HTTP verb

The method *helloWorld()* is executed when /hello is encountered from the client and it returns a text as response in this case ***Hello World !!!***

## Witness the Magic

Now that we have written our first API end point, let’s build our Spring boot application. The build command used with the Maven build is

`mvn clean compile package -DskipTests`

We are skipping the tests for now. After a successful build the executable jar would be generated in the ***target/helloworld-0.0.1-SNAPSHOT.jar***

Let’s run the executable using the command

`java -jar target/helloworld-0.0.1-SNAPSHOT.jar`

from the project directory and lets witness the magic

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/5nhggri736weri599nn4.jpg)

On closer observation of the logs written to the console we understand that the process is running on the port 8080 (it’s configurable of course)

Now that our web application is up and running on port 8080 lets see what happens when we visit the url http://localhost:8080/hello on a web browser.

You should be able to see

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/uplpu5r1igyu4gq89cuk.png)

and Ta-Daaaa !!!! We just wrote our first API endpoint using Spring boot with minimal configuration and setup.