Spring Boot - Membangun Layanan Web yang tenang
Spring Boot memberikan dukungan yang sangat baik untuk membangun Layanan Web RESTful untuk aplikasi perusahaan. Bab ini akan menjelaskan secara detail tentang membangun layanan web RESTful menggunakan Spring Boot.
Note - Untuk membangun Layanan Web RESTful, kita perlu menambahkan ketergantungan Web Spring Boot Starter ke dalam file konfigurasi build.
Jika Anda adalah pengguna Maven, gunakan kode berikut untuk menambahkan dependensi di bawah ini ke file pom.xml file -
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Jika Anda adalah pengguna Gradle, gunakan kode berikut untuk menambahkan dependensi di bawah ini ke file build.gradle mengajukan.
compile('org.springframework.boot:spring-boot-starter-web')
Kode untuk file konfigurasi build lengkap Maven build – pom.xml diberikan di bawah -
<?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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tutorialspoint</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Kode untuk file konfigurasi build lengkap Gradle Build – build.gradle diberikan di bawah -
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
group = 'com.tutorialspoint'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
Sebelum Anda melanjutkan untuk membangun layanan web RESTful, disarankan agar Anda memiliki pengetahuan tentang anotasi berikut -
Pengontrol Istirahat
Anotasi @RestController digunakan untuk menentukan layanan web RESTful. Ini melayani JSON, XML dan respons khusus. Sintaksnya ditunjukkan di bawah ini -
@RestController
public class ProductServiceController {
}
Minta Pemetaan
Anotasi @RequestMapping digunakan untuk menentukan URI Permintaan untuk mengakses REST Endpoints. Kita dapat mendefinisikan metode Request untuk mengkonsumsi dan memproduksi objek. Metode permintaan default adalah GET.
@RequestMapping(value = "/products")
public ResponseEntity<Object> getProducts() { }
Badan Permintaan
Anotasi @Requody digunakan untuk menentukan jenis konten isi permintaan.
public ResponseEntity<Object> createProduct(@RequestBody Product product) {
}
Variabel Jalur
Anotasi @PathVable digunakan untuk menentukan URI permintaan khusus atau dinamis. Variabel Path dalam URI permintaan didefinisikan sebagai kurung kurawal {} seperti yang ditunjukkan di bawah ini -
public ResponseEntity<Object> updateProduct(@PathVariable("id") String id) {
}
Parameter Permintaan
Anotasi @RequestParam digunakan untuk membaca parameter permintaan dari URL Permintaan. Secara default, ini adalah parameter wajib. Kami juga dapat mengatur nilai default untuk parameter permintaan seperti yang ditunjukkan di sini -
public ResponseEntity<Object> getProduct(
@RequestParam(value = "name", required = false, defaultValue = "honey") String name) {
}
DAPATKAN API
Metode permintaan HTTP default adalah GET. Metode ini tidak memerlukan Badan Permintaan apa pun. Anda dapat mengirim parameter permintaan dan variabel jalur untuk menentukan URL khusus atau dinamis.
Kode contoh untuk menentukan metode permintaan HTTP GET ditunjukkan di bawah ini. Dalam contoh ini, kami menggunakan HashMap untuk menyimpan Produk. Perhatikan bahwa kami menggunakan kelas POJO sebagai produk yang akan disimpan.
Di sini, URI permintaannya adalah /productsdan itu akan mengembalikan daftar produk dari repositori HashMap. File kelas kontroler diberikan di bawah ini yang berisi metode GET REST Endpoint.
package com.tutorialspoint.demo.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.tutorialspoint.demo.model.Product;
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo = new HashMap<>();
static {
Product honey = new Product();
honey.setId("1");
honey.setName("Honey");
productRepo.put(honey.getId(), honey);
Product almond = new Product();
almond.setId("2");
almond.setName("Almond");
productRepo.put(almond.getId(), almond);
}
@RequestMapping(value = "/products")
public ResponseEntity<Object> getProduct() {
return new ResponseEntity<>(productRepo.values(), HttpStatus.OK);
}
}
API POST
Permintaan HTTP POST digunakan untuk membuat sumber daya. Metode ini berisi Badan Permintaan. Kami dapat mengirimkan parameter permintaan dan variabel jalur untuk menentukan URL khusus atau dinamis.
Contoh berikut menunjukkan kode sampel untuk menentukan metode permintaan HTTP POST. Dalam contoh ini, kami menggunakan HashMap untuk menyimpan Produk, di mana produk tersebut adalah kelas POJO.
Di sini, URI permintaannya adalah /products, dan itu akan mengembalikan String setelah menyimpan produk ke dalam repositori HashMap.
package com.tutorialspoint.demo.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.tutorialspoint.demo.model.Product;
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo = new HashMap<>();
@RequestMapping(value = "/products", method = RequestMethod.POST)
public ResponseEntity<Object> createProduct(@RequestBody Product product) {
productRepo.put(product.getId(), product);
return new ResponseEntity<>("Product is created successfully", HttpStatus.CREATED);
}
}
PUT API
Permintaan HTTP PUT digunakan untuk memperbarui sumber daya yang ada. Metode ini berisi Badan Permintaan. Kami dapat mengirimkan parameter permintaan dan variabel jalur untuk menentukan URL khusus atau dinamis.
Contoh yang diberikan di bawah ini menunjukkan bagaimana mendefinisikan metode permintaan HTTP PUT. Dalam contoh ini, kami menggunakan HashMap untuk memperbarui Produk yang ada, di mana produk tersebut adalah kelas POJO.
Di sini URI permintaannya /products/{id}yang akan mengembalikan String setelah produk ke dalam repositori HashMap. Perhatikan bahwa kami menggunakan variabel Path{id} yang menentukan ID produk yang perlu diperbarui.
package com.tutorialspoint.demo.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.tutorialspoint.demo.model.Product;
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo = new HashMap<>();
@RequestMapping(value = "/products/{id}", method = RequestMethod.PUT)
public ResponseEntity<Object> updateProduct(@PathVariable("id") String id, @RequestBody Product product) {
productRepo.remove(id);
product.setId(id);
productRepo.put(id, product);
return new ResponseEntity<>("Product is updated successsfully", HttpStatus.OK);
}
}
HAPUS API
Permintaan HTTP Delete digunakan untuk menghapus sumber daya yang ada. Metode ini tidak berisi Badan Permintaan. Kami dapat mengirimkan parameter permintaan dan variabel jalur untuk menentukan URL khusus atau dinamis.
Contoh yang diberikan di bawah ini menunjukkan bagaimana mendefinisikan metode permintaan HTTP DELETE. Dalam contoh ini, kami menggunakan HashMap untuk menghapus produk yang sudah ada, yang merupakan kelas POJO.
URI permintaannya adalah /products/{id}dan itu akan mengembalikan String setelah menghapus produk dari repositori HashMap. Kami menggunakan variabel Path{id} yang menentukan ID produk yang perlu dihapus.
package com.tutorialspoint.demo.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.tutorialspoint.demo.model.Product;
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo = new HashMap<>();
@RequestMapping(value = "/products/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Object> delete(@PathVariable("id") String id) {
productRepo.remove(id);
return new ResponseEntity<>("Product is deleted successsfully", HttpStatus.OK);
}
}
Bagian ini memberikan Anda set lengkap kode sumber. Perhatikan kode berikut untuk fungsinya masing-masing -
The Spring Boot main application class – DemoApplication.java
package com.tutorialspoint.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
The POJO class – Product.java
package com.tutorialspoint.demo.model;
public class Product {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
The Rest Controller class – ProductServiceController.java
package com.tutorialspoint.demo.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.tutorialspoint.demo.model.Product;
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo = new HashMap<>();
static {
Product honey = new Product();
honey.setId("1");
honey.setName("Honey");
productRepo.put(honey.getId(), honey);
Product almond = new Product();
almond.setId("2");
almond.setName("Almond");
productRepo.put(almond.getId(), almond);
}
@RequestMapping(value = "/products/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Object> delete(@PathVariable("id") String id) {
productRepo.remove(id);
return new ResponseEntity<>("Product is deleted successsfully", HttpStatus.OK);
}
@RequestMapping(value = "/products/{id}", method = RequestMethod.PUT)
public ResponseEntity<Object> updateProduct(@PathVariable("id") String id, @RequestBody Product product) {
productRepo.remove(id);
product.setId(id);
productRepo.put(id, product);
return new ResponseEntity<>("Product is updated successsfully", HttpStatus.OK);
}
@RequestMapping(value = "/products", method = RequestMethod.POST)
public ResponseEntity<Object> createProduct(@RequestBody Product product) {
productRepo.put(product.getId(), product);
return new ResponseEntity<>("Product is created successfully", HttpStatus.CREATED);
}
@RequestMapping(value = "/products")
public ResponseEntity<Object> getProduct() {
return new ResponseEntity<>(productRepo.values(), HttpStatus.OK);
}
}
Anda dapat membuat file JAR yang dapat dieksekusi, dan menjalankan aplikasi spring boot dengan menggunakan perintah Maven atau Gradle di bawah ini seperti yang ditunjukkan -
Untuk Maven, gunakan perintah yang ditunjukkan di bawah ini -
mvn clean install
Setelah “BUILD SUCCESS”, Anda dapat menemukan file JAR di bawah direktori target.
Untuk Gradle, gunakan perintah yang ditunjukkan di bawah ini -
gradle clean build
Setelah "BUILD SUCCESSFUL", Anda dapat menemukan file JAR di bawah direktori build / libs.
Anda dapat menjalankan file JAR dengan menggunakan perintah yang ditunjukkan di bawah ini -
java –jar <JARFILE>
Ini akan memulai aplikasi pada port Tomcat 8080 seperti yang ditunjukkan di bawah ini -
Sekarang tekan URL yang ditunjukkan di bawah ini dalam aplikasi POSTMAN dan lihat hasilnya.
URL GET API adalah: http://localhost:8080/products
URL API POS adalah: http://localhost:8080/products
URL PUT API adalah: http://localhost:8080/products/3
DELETE API URL adalah: http://localhost:8080/products/3