{"id":74748,"date":"2018-03-13T10:04:51","date_gmt":"2018-03-13T08:04:51","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=74748"},"modified":"2018-03-13T10:04:51","modified_gmt":"2018-03-13T08:04:51","slug":"spring-boot-angular-5-spring-data-rest-example-crud","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html","title":{"rendered":"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD)"},"content":{"rendered":"<p>This tutorial provides a complete implementation of Spring Boot, Angular 5 and spring data to build an end to end single page java web application with example.We will be using spring boot 1.5 to expose REST APIs and angular5 with routing to build our client that will be consuming the APIs exposed by the server.Also, we will be integrating MySql database with the backend code for CRUD operation.We will be using angular CLI to generate angular project and spring boot initializers to generate spring boot project.At the end of this article, you will be able to build a user management application with CRUD operation that can either be deployed to a standalone tomcat or deploy client and server to different servers with cross origin requests.<\/p>\n<p><ins><\/ins> In the next article, we will look into <a href=\"http:\/\/www.devglan.com\/spring-boot\/spring-boot-angular-deployment\">different ways to package spring boot and angular 5 application<\/a> together in a single war file with maven and deploy to standalone tomcat. Also you might be interested in integrating this application with <a href=\"http:\/\/www.devglan.com\/spring-security\/angular-jwt-authentication\">Angular5 JWT Authentication with Spring Boot Security<\/a><\/p>\n<h2>Angular 5 Features<\/h2>\n<p><b>1. <\/b>Angular 5 is more faster, lighter and easy to use.<\/p>\n<p><b>2. <\/b>Material design capabilities and improved compiler with build optimizer<\/p>\n<p><b>3. <\/b>New HttpClientModule is introduced which is a complete rewrite of the existing HttpModule.<\/p>\n<p><b>4. <\/b>TypeScript 2.4 support.<\/p>\n<p><b>5. <\/b>Reactive Forms Support<\/p>\n<h2>Environment Setup<\/h2>\n<p>We have two different part, client and server, of the application that we are going to build and hence, the environment set up is also specific to each part.<\/p>\n<h3>Angular5 Environment SetUp<\/h3>\n<p>Angular 5 provides a beautiful tool &#8211; Angular CLI to get started with Angular. Here, we will be using the same tool to generate a sample angular app and then modify it to match our requirement.To get started with Angular CLI, it is required to have node installed so that we can use the NPM tool. You can check if node is installed or not on your machine by hitting node -v. On my machine I get following result.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/L7gBj0J.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-74751\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/L7gBj0J.png\" alt=\"\" width=\"540\" height=\"108\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/L7gBj0J.png 540w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/L7gBj0J-300x60.png 300w\" sizes=\"(max-width: 540px) 100vw, 540px\" \/><\/a><\/p>\n<p>If not installed visit <a href=\"https:\/\/nodejs.org\/en\/download\/\" rel=\"nofollow\">NodeJs official website<\/a> to install it first.Now, once it is done, traverse to your workspace location and execute following commands to install angular cli and generate a sample angular project.<\/p>\n<pre class=\"brush:java\">npm install -g @angular\/cli\r\nng new portal-app<\/pre>\n<p>Once this is done, you can traverse to the location and see a folder portal-app is created that contains all the files and folders generated by angular cli command to get started with angular 5.Now you can open your favourite editor to import the project.I imported this project in IntellijIdea and got the structure as below:<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/o0yNRpf.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-74752\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/o0yNRpf.png\" alt=\"\" width=\"252\" height=\"441\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/o0yNRpf.png 252w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/o0yNRpf-171x300.png 171w\" sizes=\"(max-width: 252px) 100vw, 252px\" \/><\/a><\/p>\n<p>One thing to check here is that if you have installed your NodeJs with sudo command, then you might get some permission issue as below while installing angular cli.To avoid these kind of situation, it is always recommended to use brew command while installing any new software.<\/p>\n<p>If you face this issue then provide read\/write access to the folder &#8211; \/usr\/local\/lib\/node_modules or follow the instruction here &#8211; <a href=\"https:\/\/support.apple.com\/kb\/PH25287?locale=en_US\" rel=\"nofollow\">Mac Support<\/a><\/p>\n<p>For windows user, you can use git command line or cygwin for the installation.<\/p>\n<h3>Spring Boot Environment SetUp<\/h3>\n<p>Spring boot team has really made spring boot environment setup easy by providing default initializers.Open the url https:\/\/start.spring.io\/ and generate the project as follow.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/USGHEZU.png\"><img decoding=\"async\" class=\"aligncenter wp-image-74753\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/USGHEZU-1024x377.png\" alt=\"\" width=\"860\" height=\"316\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/USGHEZU-1024x377.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/USGHEZU-300x110.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/USGHEZU-768x283.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<p>Now unzip user-portal.zip and import into java IDE. Following will be the final structure.<\/p>\n<p><a href=\"https:\/\/imgur.com\/o0yNRpf\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-74754\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/o0yNRpf-1.png\" alt=\"\" width=\"252\" height=\"441\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/o0yNRpf-1.png 252w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/o0yNRpf-1-171x300.png 171w\" sizes=\"(max-width: 252px) 100vw, 252px\" \/><\/a><\/p>\n<h2>Default Files Generated by CLI command<\/h2>\n<p>Now let us try to understand the different files generated.<\/p>\n<p>Modules &#8211; Modules break up the application into logical pieces of code. Each piece of code or module is designed to perform a single task.All the modules are loaded by main.ts.<\/p>\n<p>Component &#8211; Component is used to bring the modules together.<\/p>\n<p>tsconfig.json &#8211; The presence of tsconfig.json file in a directory indicates that the directory is the root of a typescript project.This file specifies the root files and typescript compiler motions required to compile typescript.<\/p>\n<p>package.json &#8211; It contains all the dependencies defined for the angular project.Once, we do nom install, these dependencies are automatically downloaded.<\/p>\n<p>karma.conf.json &#8211; Config file for karma unit tests.<\/p>\n<p>The file .angular-cli.json will have all the application configurations such as info about the root and out directory.The welcome or main html file along with the main ts file. All the other environment related information will be present here.<\/p>\n<p>Now it&#8217;s time to run the dfault generated application and see it in the browser. If you are using IntellijIdea then you can run ng serve command from Terminal inside it and if not hit following command in the terminal.<\/p>\n<pre class=\"brush:java\">cd portal-app\r\n ng serve<\/pre>\n<p>After this open your browser and hit the url &#8211; http:\/\/localhost:4200\/ and the angular app is up. Now we can start modifying the app to create a user management portal.<\/p>\n<h3>Spring Boot Rest APIs<\/h3>\n<p>Now, let&#8217;s start by creating our APIs first.We have UerController where all the APIs for CRUD operation is exposed.The @CrossOrigin is used to allow Cross-Origin Resource Sharing (CORS) so that our angular application running on different server can consume these APIs from a browser.We can also configure the proxy in angular side using proxy.config.json which has been discussed in the subsequent topic.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p><b>UserController.java<\/b><\/p>\n<pre class=\"brush:java\">package com.devglan.userportal;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.web.bind.annotation.*;\r\n\r\nimport java.util.List;\r\n\r\n@CrossOrigin(origins = \"http:\/\/localhost:4200\", maxAge = 3600)\r\n@RestController\r\n@RequestMapping({\"\/api\"})\r\npublic class UserController {\r\n\r\n    @Autowired\r\n    private UserService userService;\r\n\r\n    @PostMapping\r\n    public User create(@RequestBody User user){\r\n        return userService.create(user);\r\n    }\r\n\r\n    @GetMapping(path = {\"\/{id}\"})\r\n    public User findOne(@PathVariable(\"id\") int id){\r\n        return userService.findById(id);\r\n    }\r\n\r\n    @PutMapping\r\n    public User update(@RequestBody User user){\r\n        return userService.update(user);\r\n    }\r\n\r\n    @DeleteMapping(path ={\"\/{id}\"})\r\n    public User delete(@PathVariable(\"id\") int id) {\r\n        return userService.delete(id);\r\n    }\r\n\r\n    @GetMapping\r\n    public List findAll(){\r\n        return userService.findAll();\r\n    }\r\n}<\/pre>\n<h3>Spring Boot Service Implementation<\/h3>\n<p>The service class has no extra logic here and it&#8217;s a very a simple implementation.<\/p>\n<p><b>UserServiceImpl.java<\/b><\/p>\n<pre class=\"brush:java\">@Service\r\npublic class UserServiceImpl implements UserService {\r\n\r\n    @Autowired\r\n    private UserRepository repository;\r\n\r\n    @Override\r\n    public User create(User user) {\r\n        return repository.save(user);\r\n    }\r\n\r\n    @Override\r\n    public User delete(int id) {\r\n        User user = findById(id);\r\n        if(user != null){\r\n            repository.delete(user);\r\n        }\r\n        return user;\r\n    }\r\n\r\n    @Override\r\n    public List findAll() {\r\n        return repository.findAll();\r\n    }\r\n\r\n    @Override\r\n    public User findById(int id) {\r\n        return repository.findOne(id);\r\n    }\r\n\r\n    @Override\r\n    public User update(User user) {\r\n        return null;\r\n    }\r\n}<\/pre>\n<h3>Spring Data Implementation<\/h3>\n<p>We will be using Spring data JPA implementation for ORM related solution.To know inside implementation of Spring data you can visit my other post &#8211; <a href=\"http:\/\/www.devglan.com\/spring-boot\/spring-data-jpa-example\">Spring Boot JPA<\/a> and <a href=\"http:\/\/www.devglan.com\/spring-boot\/spring-boot-hibernate-5-example\">Spring Boot Hibernate implementation.<\/a><\/p>\n<p><b>UserRepository.java<\/b><\/p>\n<pre class=\"brush:java\">package com.devglan.userportal;\r\n\r\nimport org.springframework.data.repository.Repository;\r\n\r\nimport java.util.List;\r\n\r\npublic interface UserRepository extends Repository {\r\n\r\n    void delete(User user);\r\n\r\n    List findAll();\r\n\r\n    User findOne(int id);\r\n\r\n    User save(User user);\r\n}<\/pre>\n<h3>Spring Boot Datasource Configuration<\/h3>\n<p><b>application.properties<\/b><\/p>\n<pre class=\"brush:java\">server.contextPath=\/user-portal\r\nspring.datasource.url=jdbc:mysql:\/\/localhost:3306\/testdb\r\nspring.datasource.username=root\r\nspring.datasource.password=root\r\nspring.datasource.driver-class-name=com.mysql.jdbc.Driver\r\nspring.jpa.show-sql=true\r\nspring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl\r\nspring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy<\/pre>\n<h2>Default Scripts<\/h2>\n<pre class=\"brush:sql\">CREATE TABLE user(id INT NOT NULL AUTO_INCREMENT,email VARCHAR(255),first_name  VARCHAR(255),last_name VARCHAR(255),PRIMARY KEY (id))ENGINE=InnoDB;<\/pre>\n<h3>Create Angular Component<\/h3>\n<p>Angular CLI has generate command to create component.Hit the command ng generate component user and it will create a <b>user<\/b> folder inside app folder.This user folder will have all the required files for user module.<\/p>\n<p>At first we will modify app.component.html to include 2 links for list users and add users.All our views willl be loaded inside router-outlet.<\/p>\n<p><b>app.component.html<\/b><\/p>\n<pre class=\"brush:xml\">&lt;div class=\"container-fluid\"&gt;\r\n&lt;div class=\"col-md-offset-1\"&gt;\r\n  &lt;h1&gt;\r\n    Welcome to {{title}}!\r\n  &lt;\/h1&gt;\r\n&lt;\/div&gt;\r\n\r\n&lt;a routerLink=\"\/users\"&gt; List Users&lt;\/a&gt;\r\n&lt;a style=\"margin-left:10px\" routerLink=\"\/add\"&gt;Add User&lt;\/a&gt;\r\n&lt;br\/&gt;\r\n&lt;router-outlet&gt;&lt;\/router-outlet&gt;\r\n&lt;\/div&gt;<\/pre>\n<p>Since, we have two routes defined above, we require two different views(user.component.html, add-user.component.html) and components(user.component.ts, add-user.component.ts) to render on each click.Now let us implement the code for user.component.ts.Here, the method ngOnInit() will be invoked when this component is loaded and it will fetch all the user records and the html page will be populated.<\/p>\n<p><b>user.compnent.ts<\/b><\/p>\n<pre class=\"brush:java\">import { Component, OnInit } from '@angular\/core';\r\nimport { Router } from '@angular\/router';\r\n\r\nimport { User } from '..\/models\/user.model';\r\nimport { UserService } from '.\/user.service';\r\n\r\n@Component({\r\n  selector: 'app-user',\r\n  templateUrl: '.\/user.component.html',\r\n  styles: []\r\n})\r\nexport class UserComponent implements OnInit {\r\n\r\n  users: User[];\r\n\r\n  constructor(private router: Router, private userService: UserService) {\r\n\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.userService.getUsers()\r\n      .subscribe( data =&gt; {\r\n        this.users = data;\r\n      });\r\n  };\r\n\r\n  deleteUser(user: User): void {\r\n    this.userService.deleteUser(user)\r\n      .subscribe( data =&gt; {\r\n        this.users = this.users.filter(u =&gt; u !== user);\r\n      })\r\n  };\r\n\r\n}<\/pre>\n<p>Similarly we have\u00a0<b>add-user.component.ts<\/b><\/p>\n<pre class=\"brush:java\">import { Component } from '@angular\/core';\r\nimport { Router } from '@angular\/router';\r\n\r\nimport { User } from '..\/models\/user.model';\r\nimport { UserService } from '.\/user.service';\r\n\r\n@Component({\r\n  templateUrl: '.\/add-user.component.html'\r\n})\r\nexport class AddUserComponent {\r\n\r\n  user: User = new User();\r\n\r\n  constructor(private router: Router, private userService: UserService) {\r\n\r\n  }\r\n\r\n  createUser(): void {\r\n    this.userService.createUser(this.user)\r\n        .subscribe( data =&gt; {\r\n          alert(\"User created successfully.\");\r\n        });\r\n\r\n  };\r\n\r\n}<\/pre>\n<p><b>user.model.ts<\/b><\/p>\n<pre class=\"brush:java\">export class User {\r\n\r\n  id: string;\r\n  firstName: string;\r\n  lastName: string;\r\n  email: string;\r\n}<\/pre>\n<p><b>user.service.ts<\/b><\/p>\n<pre class=\"brush:java\">import {Injectable} from '@angular\/core';\r\nimport { HttpClient, HttpHeaders } from '@angular\/common\/http';\r\n\r\nimport { User } from '..\/models\/user.model';\r\n\r\n\r\nconst httpOptions = {\r\n  headers: new HttpHeaders({ 'Content-Type': 'application\/json' })\r\n};\r\n\r\n@Injectable()\r\nexport class UserService {\r\n\r\n  constructor(private http:HttpClient) {}\r\n\r\n  private userUrl = 'http:\/\/localhost:8080\/user-portal\/api';\r\n\r\n  public getUsers() {\r\n    return this.http.get(this.userUrl);\r\n  }\r\n\r\n  public deleteUser(user) {\r\n    return this.http.delete(this.userUrl + \"\/\"+ user.id);\r\n  }\r\n\r\n  public createUser(user) {\r\n    return this.http.post(this.userUrl, user);\r\n  }\r\n\r\n}<\/pre>\n<h3>Create Angular Views<\/h3>\n<p>As discussed we have two views &#8211; user.component.html and add-user.component.html<\/p>\n<p><b>user.component.html<\/b><\/p>\n<pre class=\"brush:xml\">&lt;div class=\"col-md-6\"&gt;\r\n&lt;h2&gt; User Details&lt;\/h2&gt;\r\n\r\n&lt;table class=\"table table-striped\"&gt;\r\n  &lt;thead&gt;\r\n  &lt;tr&gt;\r\n    &lt;th class=\"hidden\"&gt;Id&lt;\/th&gt;\r\n    &lt;th&gt;FirstName&lt;\/th&gt;\r\n    &lt;th&gt;LastName&lt;\/th&gt;\r\n    &lt;th&gt;Email&lt;\/th&gt;\r\n    &lt;th&gt;Action&lt;\/th&gt;\r\n  &lt;\/tr&gt;\r\n  &lt;\/theadv\r\n  &lt;tbody&gt;\r\n  &lt;tr *ngFor=\"let user of users\"&gt;\r\n    &lt;td class=\"hidden\"&gt;{{user.id}}&lt;\/td&gt;\r\n    &lt;td&gt;{{user.firstName}}&lt;\/td&gt;\r\n    &lt;td&gt;{{user.lastName}}&lt;\/td&gt;\r\n    &lt;td&gt;{{user.email}}&lt;\/td&gt;\r\n    &lt;td&gt;&lt;button class=\"btn btn-danger\" (click)=\"deleteUser(user)\"&gt; Delete User&lt;\/button&gt;&lt;\/td&gt;\r\n  &lt;\/tr&gt;\r\n  &lt;\/tbody&gt;\r\n&lt;\/table&gt;\r\n&lt;\/div&gt;<\/pre>\n<p><b>add-user.component.html<\/b><\/p>\n<pre class=\"brush:xml\">&lt;div class=\"col-md-6\"&gt;\r\n  &lt;h2 class=\"text-center\"&gt;Add User&lt;\/h2&gt;\r\n&lt;form&gt;\r\n  &lt;div class=\"form-group\"&gt;\r\n    &lt;label for=\"email\"&gt;Email address:&lt;\/label&gt;\r\n    &lt;input type=\"email\" [(ngModel)]=\"user.email\" placeholder=\"Email\" name=\"email\" class=\"form-control\" id=\"email\"&gt;\r\n  &lt;\/div&gt;\r\n\r\n  &lt;div class=\"form-group\"&gt;\r\n    &lt;label for=\"firstName\"&gt;First Name:&lt;\/label&gt;\r\n    &lt;input [(ngModel)]=\"user.firstName\" placeholder=\"First Name\" name=\"firstName\" class=\"form-control\" id=\"firstName\"&gt;\r\n  &lt;\/div&gt;\r\n\r\n  &lt;div class=\"form-group\"&gt;\r\n    &lt;label for=\"lastName\"&gt;Last Name:&lt;\/label&gt;\r\n   &lt;input [(ngModel)]=\"user.lastName\" placeholder=\"Last name\" name=\"lastName\" class=\"form-control\" id=\"lastName\"&gt;\r\n  &lt;\/div&gt;\r\n\r\n  &lt;button class=\"btn btn-success\" (click)=\"createUser()\"&gt;Create&lt;\/button&gt;\r\n&lt;\/form&gt;\r\n&lt;\/div&gt;<\/pre>\n<h3>Angular Routing<\/h3>\n<p>Now it&#8217;s time to configure routing in angular.In this configuration, we will configure the path and corresponding component to load which will in turn load the respective view.Following is our routing configuration.<\/p>\n<p><b>app.routing.module.ts<\/b><\/p>\n<pre class=\"brush:java\">import { NgModule } from '@angular\/core';\r\nimport { RouterModule, Routes } from '@angular\/router';\r\n\r\nimport { UserComponent } from '.\/user\/user.component';\r\nimport {AddUserComponent} from '.\/user\/add-user.component';\r\n\r\nconst routes: Routes = [\r\n  { path: 'users', component: UserComponent },\r\n  { path: 'add', component: AddUserComponent }\r\n];\r\n\r\n@NgModule({\r\n  imports: [\r\n    RouterModule.forRoot(routes)\r\n  ],\r\n  exports: [\r\n    RouterModule\r\n  ],\r\n  declarations: []\r\n})\r\nexport class AppRoutingModule { }<\/pre>\n<h3>Angular Module<\/h3>\n<p>Now we are almost done with our application.We only need to include all the above implementation in our main module.<\/p>\n<p><b>app.module.ts<\/b><\/p>\n<pre class=\"brush:java\">import { BrowserModule } from '@angular\/platform-browser';\r\nimport { NgModule } from '@angular\/core';\r\nimport { FormsModule } from '@angular\/forms';\r\n\r\nimport { AppComponent } from '.\/app.component';\r\nimport { UserComponent } from '.\/user\/user.component';\r\nimport { AppRoutingModule } from '.\/app.routing.module';\r\nimport {UserService} from '.\/user\/user.service';\r\nimport {HttpClientModule} from \"@angular\/common\/http\";\r\nimport {AddUserComponent} from '.\/user\/add-user.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    AppComponent,\r\n    UserComponent,\r\n    AddUserComponent\r\n  ],\r\n  imports: [\r\n    BrowserModule,\r\n    AppRoutingModule,\r\n    HttpClientModule,\r\n    FormsModule\r\n  ],\r\n  providers: [UserService],\r\n  bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }<\/pre>\n<h2>Angular CLI Proxy Configuration<\/h2>\n<p>To configure proxy in angular CLI, we need to create proxy.config.json file in the root of the angular project and edit the start script in package.json.<\/p>\n<p><b>proxy.config.json<\/b><\/p>\n<pre class=\"brush:java\">{\r\n  \"\/api\/*\": {\r\n    \"target\": \"http:\/\/localhost:8080\/user-portal\",\r\n    \"secure\": false\r\n  }\r\n}<\/pre>\n<p>The value of target here is the context root of the application and api is the endpoint for user API.<\/p>\n<p><b>package.json<\/b><\/p>\n<pre class=\"brush:java\">\"start\": \"ng serve --proxy-config proxy.config.json\",<\/pre>\n<p>Now make sure to change the userUrl value to &#8216;\/api&#8217; in user.service.ts file and comment @CrossOrigin in UserController.java.Once this done use ng serve &#8211;proxy-config proxy.config.json or npm start to start the angular app.<\/p>\n<h2>Final Application Structure<\/h2>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/pLuqFoj.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-74755\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/pLuqFoj.png\" alt=\"\" width=\"395\" height=\"705\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/pLuqFoj.png 395w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/pLuqFoj-168x300.png 168w\" sizes=\"(max-width: 395px) 100vw, 395px\" \/><\/a><\/p>\n<h2>Running Spring Boot Application<\/h2>\n<p>We will be using spring boot embedded tomcat feature to deploy application.For more on this feature <a href=\"http:\/\/www.devglan.com\/spring-boot\/spring-boot-mvc-app-with-jsp\">check this<\/a>.<\/p>\n<p><b>UserPortalApplication.java<\/b><\/p>\n<pre class=\"brush:java\">package com.devglan.userportal;\r\n\r\nimport org.springframework.boot.SpringApplication;\r\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\r\n\r\n@SpringBootApplication\r\npublic class UserPortalApplication {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tSpringApplication.run(UserPortalApplication.class, args);\r\n\t}\r\n}<\/pre>\n<h2>Run Angular App<\/h2>\n<p>Now the server is up.Hit ng serve to deploy angular application and let&#8217;s test the application.<\/p>\n<p>Hit the url &#8211; <a>http:\/\/localhost:4200\/<\/a> and you can see following result.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/hNzPOWZ.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-74756\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/hNzPOWZ.png\" alt=\"\" width=\"594\" height=\"270\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/hNzPOWZ.png 594w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/hNzPOWZ-300x136.png 300w\" sizes=\"(max-width: 594px) 100vw, 594px\" \/><\/a><\/p>\n<p>Now, click on the Add User link and following form will appear to add user.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/evyRFP0.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-74757\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/evyRFP0.png\" alt=\"\" width=\"718\" height=\"610\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/evyRFP0.png 718w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/evyRFP0-300x255.png 300w\" sizes=\"(max-width: 718px) 100vw, 718px\" \/><\/a><\/p>\n<p>Now, click on the list user after adding multiple users.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/QTSMA1r.png\"><img decoding=\"async\" class=\"aligncenter wp-image-74758\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/QTSMA1r.png\" alt=\"\" width=\"860\" height=\"511\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/QTSMA1r.png 925w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/QTSMA1r-300x178.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/03\/QTSMA1r-768x457.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<h2>Conclusion<\/h2>\n<p>This is pretty much about spring boot and angular 5 integration tutorial.In the next article, we will look into <a href=\"http:\/\/www.devglan.com\/spring-boot\/spring-boot-angular-deployment\">deploying this application<\/a> in a single war file with maven and tomcat. You can download the source from <a href=\"https:\/\/github.com\/only2dhir\/spring-boot-angular5\"> here<\/a>.If time permits, we will try to integrate spring security with it.Please let me know your comments below.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>Published on Java Code Geeks with permission by Dhiraj Ray, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener\">JCG program<\/a>. See the original article here: <a href=\"http:\/\/www.devglan.com\/spring-boot\/spring-boot-angular-example\" target=\"_blank\" rel=\"noopener\">Spring Boot + Angular 5 +Spring Data + Rest Example(CRUD)<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial provides a complete implementation of Spring Boot, Angular 5 and spring data to build an end to end single page java web application with example.We will be using spring boot 1.5 to expose REST APIs and angular5 with routing to build our client that will be consuming the APIs exposed by the server.Also, &hellip;<\/p>\n","protected":false},"author":19520,"featured_media":49726,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[1707,815,854,321],"class_list":["post-74748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-angular-5","tag-rest","tag-spring-boot","tag-spring-data"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD) - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"This tutorial provides a complete implementation of Spring Boot, Angular 5 and spring data to build an end to end single page java web application with\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD) - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"This tutorial provides a complete implementation of Spring Boot, Angular 5 and spring data to build an end to end single page java web application with\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/dhiraj.ray.39\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-13T08:04:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/angularjs-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Dhiraj Ray\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@only2dhir\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dhiraj Ray\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html\"},\"author\":{\"name\":\"Dhiraj Ray\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/ca8ced76695eb39d8a6a0519be00e2f0\"},\"headline\":\"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD)\",\"datePublished\":\"2018-03-13T08:04:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html\"},\"wordCount\":1469,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2015\\\/12\\\/angularjs-logo.jpg\",\"keywords\":[\"Angular 5\",\"REST\",\"Spring Boot\",\"Spring Data\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html\",\"name\":\"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD) - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2015\\\/12\\\/angularjs-logo.jpg\",\"datePublished\":\"2018-03-13T08:04:51+00:00\",\"description\":\"This tutorial provides a complete implementation of Spring Boot, Angular 5 and spring data to build an end to end single page java web application with\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2015\\\/12\\\/angularjs-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2015\\\/12\\\/angularjs-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/03\\\/spring-boot-angular-5-spring-data-rest-example-crud.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/ca8ced76695eb39d8a6a0519be00e2f0\",\"name\":\"Dhiraj Ray\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ec5d4a3295c99de70fc9b4f0ab3f8cd1a8ff127aa81e43163f75b5dc32cf906?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ec5d4a3295c99de70fc9b4f0ab3f8cd1a8ff127aa81e43163f75b5dc32cf906?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ec5d4a3295c99de70fc9b4f0ab3f8cd1a8ff127aa81e43163f75b5dc32cf906?s=96&d=mm&r=g\",\"caption\":\"Dhiraj Ray\"},\"description\":\"He is a technology savvy professional with an exceptional capacity to analyze, solve problems and multi-task. He is an avid reader and a technology enthusiast who likes to be up to date with all the latest advancements happening in the techno world. He also runs his own blog @ devglan.com\",\"sameAs\":[\"http:\\\/\\\/www.devglan.com\\\/\",\"https:\\\/\\\/www.facebook.com\\\/dhiraj.ray.39\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/dhiraj-ray-devglan\\\/\",\"https:\\\/\\\/x.com\\\/only2dhir\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/dhiraj-ray\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD) - Java Code Geeks","description":"This tutorial provides a complete implementation of Spring Boot, Angular 5 and spring data to build an end to end single page java web application with","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:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html","og_locale":"en_US","og_type":"article","og_title":"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD) - Java Code Geeks","og_description":"This tutorial provides a complete implementation of Spring Boot, Angular 5 and spring data to build an end to end single page java web application with","og_url":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_author":"https:\/\/www.facebook.com\/dhiraj.ray.39","article_published_time":"2018-03-13T08:04:51+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/angularjs-logo.jpg","type":"image\/jpeg"}],"author":"Dhiraj Ray","twitter_card":"summary_large_image","twitter_creator":"@only2dhir","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Dhiraj Ray","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html"},"author":{"name":"Dhiraj Ray","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/ca8ced76695eb39d8a6a0519be00e2f0"},"headline":"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD)","datePublished":"2018-03-13T08:04:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html"},"wordCount":1469,"commentCount":4,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/angularjs-logo.jpg","keywords":["Angular 5","REST","Spring Boot","Spring Data"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html","url":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html","name":"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD) - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/angularjs-logo.jpg","datePublished":"2018-03-13T08:04:51+00:00","description":"This tutorial provides a complete implementation of Spring Boot, Angular 5 and spring data to build an end to end single page java web application with","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/angularjs-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/angularjs-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2018\/03\/spring-boot-angular-5-spring-data-rest-example-crud.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring Boot &amp; Angular 5 &amp; Spring Data &amp; Rest Example (CRUD)"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/ca8ced76695eb39d8a6a0519be00e2f0","name":"Dhiraj Ray","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1ec5d4a3295c99de70fc9b4f0ab3f8cd1a8ff127aa81e43163f75b5dc32cf906?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1ec5d4a3295c99de70fc9b4f0ab3f8cd1a8ff127aa81e43163f75b5dc32cf906?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1ec5d4a3295c99de70fc9b4f0ab3f8cd1a8ff127aa81e43163f75b5dc32cf906?s=96&d=mm&r=g","caption":"Dhiraj Ray"},"description":"He is a technology savvy professional with an exceptional capacity to analyze, solve problems and multi-task. He is an avid reader and a technology enthusiast who likes to be up to date with all the latest advancements happening in the techno world. He also runs his own blog @ devglan.com","sameAs":["http:\/\/www.devglan.com\/","https:\/\/www.facebook.com\/dhiraj.ray.39","https:\/\/www.linkedin.com\/in\/dhiraj-ray-devglan\/","https:\/\/x.com\/only2dhir"],"url":"https:\/\/www.javacodegeeks.com\/author\/dhiraj-ray"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/74748","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/19520"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=74748"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/74748\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/49726"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=74748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=74748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=74748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}