Building a REST Service with Spring Boot and MongoDB
1. Introduction
This is an in-depth article related to the Spring Boot based Rest Service with MongoDB. Spring Boot framework has features to build applications. Spring Boot has features related to building rest services with MongoDB and unit testing the application.
2. Spring Boot Rest Service using MongoDB
2.1 Prerequisites
Java 8 or 9 is required on the Linux, windows or mac operating system. Maven 3.6.1 is required for building the spring and hibernate application. MongoDB needs to be installed for example.
2.2 Download
You can download Java 8 can be downloaded from the Oracle web site . Apache Maven 3.6.1 can be downloaded fromApache site. Spring framework latest releases are available from the spring website. You can download the Mongo DB from the Mongo Database website for linux, windows or macOS version.
2.3 Setup
You can set the environment variables for JAVA_HOME and PATH. They can be set as shown below:
Environment Setup for Java
JAVA_HOME="/desktop/jdk1.8.0_73" export JAVA_HOME PATH=$JAVA_HOME/bin:$PATH export PATH
The environment variables for maven are set as below:
Environment Setup for Maven
JAVA_HOME=”/jboss/jdk1.8.0_73″ export M2_HOME=/users/bhagvan.kommadi/Desktop/apache-maven-3.6.1 export M2=$M2_HOME/bin export PATH=$M2:$PATH
2.4 Building the application
2.4.1 Spring
You can start building Spring applications using Spring Boot framework. Spring Boot has minimal configuration of Spring. Spring Boot has features related to security, tracing, application health management and runtime support for webservers. Spring configuration is done through maven pom.xml. The xml configuration is shown as below:
Spring Configuration
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springframework</groupId> <artifactId>spring-helloworld</artifactId> <version>0.1.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
You can create a HelloWorldController
class as the web controller. The class is annotated using @RestController
. Rest Controller is used to handle requests in Spring Model View Controller framework. Annotation @RequestMapping
is used to annotate the index()
method. The code for the HelloWorldController
class is shown below:
HelloWorld Controller
package helloworld; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; @RestController public class HelloWorldController { @RequestMapping("/") public String index() { return "Hello World\n"; } }
HelloWorldApp
is created as the Spring Boot web application. When the application starts, beans, and settings are wired up dynamically. They are applied to the application context. The code for HelloWorldApp
class is shown below:
HelloWorld App
package helloworld; import java.util.Arrays; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; @SpringBootApplication public class HelloWorldApp { public static void main(String[] args) { ApplicationContext ctx = SpringApplication.run(HelloWorldApp.class, args); System.out.println("Inspecting the beans"); String[] beans = ctx.getBeanDefinitionNames(); Arrays.sort(beans); for (String name : beans) { System.out.println("Bean Name" +name); } } }
Maven is used for building the application. The command below builds the application.
Maven Build Command
mvn package
The output of the executed command is shown below.
The jar file spring-helloworld-0.1.0.jar is created. The following command is used for executing the jar file.
Run Command
java -jar target/spring-helloworld-0.1.0.jar
The output of the executed command is shown below.
Curl command is invoked on the command line for the execution of index
method. The method returns a String “Hello World” text. @RestController
aggregates the two annotations @Controller
and @ResponseBody
. This results in returning data. The ouput is shown as below.
2.5 Rest Web Service with MongoDb
Let us start building a Spring Boot based Rest Service using MongoDB. You can create a SpringBootApplication
as shown below:
SpringMongoRestApplication
package org.javacodegeeks.springmongodb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringMongoRestApplication { public static void main(String[] args) { SpringApplication.run(SpringMongoRestApplication.class, args); } }
You can create a Customer
class which has id
, firstName
, and lastName
attributes. The code is presented below:
Customer Class
package org.javacodegeeks.springmongodb; import org.springframework.data.annotation.Id; public class Customer { @Id private String id; private String firstName; private String lastName; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
You can create a CustomerRepository
class which extends MongoRepository
as shown below. The customer API maps to the rest api path /customers
.
Customer Repository
package org.javacodegeeks.springmongodb; import java.util.List; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.repository.query.Param; import org.springframework.data.rest.core.annotation.RepositoryRestResource; @RepositoryRestResource(collectionResourceRel = "customers", path = "customers") public interface CustomerRepository extends MongoRepository { List findByLastName(@Param("name") String name); }
Maven pom.xml is created to build the application and for execution. The xml configuration is attached below:
Maven xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.javacodegeeks</groupId> <artifactId>spring-mongodb-rest</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-mongodb-rest</name> <description> Spring Boot Rest - MongoDB</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
You can start MongoDB using the command below:
MongoDB startup
./mongod
Maven is used for building the application. The command below builds the application.
Maven Build Command
mvn package
The output of the executed command is shown below.
Build – Output
apples-MacBook-Air:restapp bhagvan.kommadi$ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------- [INFO] Building spring-mongodb-rest 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ spring-mongodb-rest --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/src/main/resources [INFO] skip non existing resourceDirectory /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ spring-mongodb-rest --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ spring-mongodb-rest --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ spring-mongodb-rest --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/target/test-classes [INFO] [INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ spring-mongodb-rest --- . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.2.RELEASE) MockHttpServletRequest: HTTP Method = GET Request URI = / Parameters = {} Headers = [] Body = null Session Attrs = {} Handler: Type = org.springframework.data.rest.webmvc.RepositoryController Method = org.springframework.data.rest.webmvc.RepositoryController#listRepositories() Async: Async started = false Async result = null Resolved Exception: Type = null ModelAndView: View name = null View = null Model = null FlashMap: Attributes = null MockHttpServletResponse: Status = 200 Error message = null Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers", Content-Type:"application/hal+json"] Content type = application/hal+json Body = { "_links" : { "customers" : { "href" : "http://localhost/customers{?page,size,sort}", "templated" : true }, "profile" : { "href" : "http://localhost/profile" } } } Forwarded URL = null Redirected URL = null Cookies = [] [INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.163 s - in org.javacodegeeks.springmongodb.SpringMongoRestApplicationTests 2020-07-14 22:13:38.757 INFO 2165 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor' 2020-07-14 22:13:38.761 INFO 2165 --- [extShutdownHook] org.mongodb.driver.connection : Closed connection [connectionId{localValue:2, serverValue:4}] to localhost:27017 because the pool has been closed. [INFO] [INFO] Results: [INFO] [INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] [INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ spring-mongodb-rest --- [INFO] Building jar: /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/target/spring-mongodb-rest-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.2.2.RELEASE:repackage (repackage) @ spring-mongodb-rest --- [INFO] Replacing main artifact with repackaged archive [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 19.402 s [INFO] Finished at: 2020-07-14T22:13:41+05:30 [INFO] ------------------------------------------------------------------------
Maven is used for executing the application. The command below runs the spring boot application.
Maven Build Command
mvn spring-boot:run
The output of the executed command is shown below.
Execution – Output
apples-MacBook-Air:restapp bhagvan.kommadi$ mvn spring-boot:run [INFO] Scanning for projects... [INFO] [INFO] ------------------------------- [INFO] Building spring-mongodb-rest 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] >>> spring-boot-maven-plugin:2.2.2.RELEASE:run (default-cli) > test-compile @ spring-mongodb-rest >>> [INFO] [INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ spring-mongodb-rest --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/src/main/resources [INFO] skip non existing resourceDirectory /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ spring-mongodb-rest --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ spring-mongodb-rest --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ spring-mongodb-rest --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] <<< spring-boot-maven-plugin:2.2.2.RELEASE:run (default-cli) < test-compile @ spring-mongodb-rest <<< [INFO] [INFO] [INFO] --- spring-boot-maven-plugin:2.2.2.RELEASE:run (default-cli) @ spring-mongodb-rest --- [INFO] Attaching agents: [] . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.2.RELEASE) 2020-07-14 22:17:03.772 INFO 2262 --- [ main] o.j.s.SpringMongoRestApplication : Starting SpringMongoRestApplication on apples-MacBook-Air.local with PID 2262 (/Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp/target/classes started by bhagvan.kommadi in /Users/bhagvan.kommadi/Desktop/JavacodeGeeks/Code/springmongodb/restapp) 2020-07-14 22:17:03.779 INFO 2262 --- [ main] o.j.s.SpringMongoRestApplication : No active profile set, falling back to default profiles: default 2020-07-14 22:17:05.111 INFO 2262 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data MongoDB repositories in DEFAULT mode. 2020-07-14 22:17:05.349 INFO 2262 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 217ms. Found 1 MongoDB repository interfaces. 2020-07-14 22:17:05.824 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.hateoas.config.HateoasConfiguration' of type [org.springframework.hateoas.config.HateoasConfiguration$$EnhancerBySpringCGLIB$$cd1a95ce] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.851 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'relProviderPluginRegistry' of type [org.springframework.plugin.core.support.PluginRegistryFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.856 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'relProviderPluginRegistry' of type [org.springframework.plugin.core.OrderAwarePluginRegistry] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.860 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean '_relProvider' of type [org.springframework.hateoas.server.core.DelegatingLinkRelationProvider] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.870 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'messageResolver' of type [org.springframework.hateoas.mediatype.MessageSourceResolver] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.872 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.hateoas.mediatype.hal.HalMediaTypeConfiguration' of type [org.springframework.hateoas.mediatype.hal.HalMediaTypeConfiguration$$EnhancerBySpringCGLIB$$270f24a3] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.882 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration' of type [org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.884 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration' of type [org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.888 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration' of type [org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.911 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties' of type [org.springframework.boot.autoconfigure.jackson.JacksonProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.912 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'standardJacksonObjectMapperBuilderCustomizer' of type [org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration$StandardJackson2ObjectMapperBuilderCustomizer] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.917 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration' of type [org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.924 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'parameterNamesModule' of type [com.fasterxml.jackson.module.paramnames.ParameterNamesModule] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.925 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration' of type [org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.938 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'jsonComponentModule' of type [org.springframework.boot.jackson.JsonComponentModule] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.939 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.data.web.config.SpringDataJacksonConfiguration' of type [org.springframework.data.web.config.SpringDataJacksonConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.945 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'jacksonGeoModule' of type [org.springframework.data.geo.GeoModule] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.948 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'jacksonObjectMapperBuilder' of type [org.springframework.http.converter.json.Jackson2ObjectMapperBuilder] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:05.979 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'jacksonObjectMapper' of type [com.fasterxml.jackson.databind.ObjectMapper] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:06.033 INFO 2262 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'hypermediaWebMvcConverters' of type [org.springframework.hateoas.config.WebConverters] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2020-07-14 22:17:06.489 INFO 2262 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2020-07-14 22:17:06.521 INFO 2262 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-07-14 22:17:06.521 INFO 2262 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.29] 2020-07-14 22:17:06.681 INFO 2262 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-07-14 22:17:06.682 INFO 2262 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2786 ms 2020-07-14 22:17:07.267 INFO 2262 --- [ main] org.mongodb.driver.cluster : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500} 2020-07-14 22:17:07.433 INFO 2262 --- [localhost:27017] org.mongodb.driver.connection : Opened connection [connectionId{localValue:1, serverValue:5}] to localhost:27017 2020-07-14 22:17:07.438 INFO 2262 --- [localhost:27017] org.mongodb.driver.cluster : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 3, 11]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=null, roundTripTimeNanos=2878664} 2020-07-14 22:17:09.262 INFO 2262 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2020-07-14 22:17:10.118 INFO 2262 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2020-07-14 22:17:10.122 INFO 2262 --- [ main] o.j.s.SpringMongoRestApplication : Started SpringMongoRestApplication in 6.982 seconds (JVM running for 7.946)
Curl command is invoked on the command line for invoking the rest API base url. The output is shown below:
Rest API Base URL- Curl
apples-MacBook-Air:~ bhagvan.kommadi$ curl http://localhost:8080 { "_links" : { "customers" : { "href" : "http://localhost:8080/customers{?page,size,sort}", "templated" : true }, "profile" : { "href" : "http://localhost:8080/profile" } } }
The curl command is invoked on the command line for invoking the rest API with a path /customers
. The output is shown below:
Rest API Customers- Curl
apples-MacBook-Air:~ bhagvan.kommadi$ curl http://localhost:8080/customers { "_embedded" : { "customers" : [ { "firstName" : "Charles Jr.", "lastName" : "Stock", "_links" : { "self" : { "href" : "http://localhost:8080/customers/5f0de52f4832bc224613555a" }, "customer" : { "href" : "http://localhost:8080/customers/5f0de52f4832bc224613555a" } } } ] }, "_links" : { "self" : { "href" : "http://localhost:8080/customers{?page,size,sort}", "templated" : true }, "profile" : { "href" : "http://localhost:8080/profile/customers" }, "search" : { "href" : "http://localhost:8080/customers/search" } }, "page" : { "size" : 20, "totalElements" : 1, "totalPages" : 1, "number" : 0 } }
Curl command is invoked on the command line for creation of a new customer. The output is shown below:
Customer Creation Post method- Curl
apples-MacBook-Air:~ bhagvan.kommadi$ curl -i -X POST -H "Content-Type:application/json" -d "{ \"firstName\" : \"Thomas\", \"lastName\" : \"Edison\" }" http://localhost:8080/customers HTTP/1.1 201 Created Server: Apache-Coyote/1.1 Location:http://localhost:8080/customers/53149b8e3004990b1af9f229 Content-Length: 0 Date: Mon, 14 Jul 2020 19:36:21 GMT HTTP/1.1 201 Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Location: http://localhost:8080/customers/5f0de3196470f706ca6dbb86 Content-Type: application/hal+json Transfer-Encoding: chunked Date: Tue, 14 Jul 2020 16:53:45 GMT { "firstName" : "Thomas", "lastName" : "Edison", "_links" : { "self" : { "href" : "http://localhost:8080/customers/5f0de3196470f706ca6dbb86" }, "customer" : { "href" : "http://localhost:8080/customers/5f0de3196470f706ca6dbb86" } } }
Curl command is invoked on the command line for retrieving the customer. The output is shown below:
Customer Get – Curl
apples-MacBook-Air:~ bhagvan.kommadi$ curl http://localhost:8080/customers/5f0de3196470f706ca6dbb86 { "firstName" : "Thomas", "lastName" : "Edison", "_links" : { "self" : { "href" : "http://localhost:8080/customers/5f0de3196470f706ca6dbb86" }, "customer" : { "href" : "http://localhost:8080/customers/5f0de3196470f706ca6dbb86" } } }
3. Download the Source Code
You can download the full source code of this example here: Building a REST Service with Spring Boot and MongoDB
I dont know how to start Mongo DB. The command ./mongodb to be run in which path?