Spring Boot - การสร้างบริการเว็บที่น่าสนใจ
Spring Boot ให้การสนับสนุนที่ดีมากในการสร้าง RESTful Web Services สำหรับแอปพลิเคชันระดับองค์กร บทนี้จะอธิบายรายละเอียดเกี่ยวกับการสร้างเว็บเซอร์วิส RESTful โดยใช้ Spring Boot
Note - สำหรับการสร้าง RESTful Web Services เราจำเป็นต้องเพิ่มการพึ่งพาเว็บ Spring Boot Starter ลงในไฟล์คอนฟิกูเรชันของบิลด์
หากคุณเป็นผู้ใช้ Maven ให้ใช้รหัสต่อไปนี้เพื่อเพิ่มการอ้างอิงด้านล่างในไฟล์ pom.xml ไฟล์ -
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
หากคุณเป็นผู้ใช้ Gradle ให้ใช้รหัสต่อไปนี้เพื่อเพิ่มการอ้างอิงด้านล่างในไฟล์ build.gradle ไฟล์.
compile('org.springframework.boot:spring-boot-starter-web')
รหัสสำหรับไฟล์คอนฟิกูเรชันบิลด์ที่สมบูรณ์ Maven build – pom.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
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>
รหัสสำหรับไฟล์คอนฟิกูเรชันบิลด์ที่สมบูรณ์ Gradle Build – build.gradle ได้รับด้านล่าง -
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')
}
ก่อนที่คุณจะดำเนินการสร้างบริการเว็บ RESTful ขอแนะนำให้คุณมีความรู้เกี่ยวกับคำอธิบายประกอบต่อไปนี้ -
ตัวควบคุมส่วนที่เหลือ
คำอธิบายประกอบ @RestController ใช้เพื่อกำหนดเว็บเซอร์วิส RESTful ให้บริการ JSON, XML และการตอบสนองที่กำหนดเอง ไวยากรณ์ของมันแสดงไว้ด้านล่าง -
@RestController
public class ProductServiceController {
}
ขอการแมป
คำอธิบายประกอบ @RequestMapping ใช้เพื่อกำหนด URI คำขอเพื่อเข้าถึง REST Endpoints เราสามารถกำหนดวิธีการร้องขอเพื่อบริโภคและสร้างวัตถุ วิธีการร้องขอเริ่มต้นคือ GET
@RequestMapping(value = "/products")
public ResponseEntity<Object> getProducts() { }
ร้องขอร่างกาย
คำอธิบายประกอบ @RequestBody ใช้เพื่อกำหนดชนิดเนื้อหาของคำร้องขอ
public ResponseEntity<Object> createProduct(@RequestBody Product product) {
}
ตัวแปรเส้นทาง
คำอธิบายประกอบ @PathVariable ใช้เพื่อกำหนด URI คำขอแบบกำหนดเองหรือแบบไดนามิก ตัวแปร Path ใน URI คำขอถูกกำหนดให้เป็นวงเล็บปีกกา {} ดังที่แสดงด้านล่าง -
public ResponseEntity<Object> updateProduct(@PathVariable("id") String id) {
}
ขอพารามิเตอร์
คำอธิบายประกอบ @RequestParam ใช้เพื่ออ่านพารามิเตอร์การร้องขอจาก URL คำขอ โดยค่าเริ่มต้นเป็นพารามิเตอร์ที่จำเป็น นอกจากนี้เรายังสามารถตั้งค่าเริ่มต้นสำหรับพารามิเตอร์คำขอดังที่แสดงไว้ที่นี่ -
public ResponseEntity<Object> getProduct(
@RequestParam(value = "name", required = false, defaultValue = "honey") String name) {
}
รับ API
วิธีการร้องขอ HTTP เริ่มต้นคือ GET วิธีนี้ไม่จำเป็นต้องใช้ร่างกายคำขอใด ๆ คุณสามารถส่งพารามิเตอร์คำขอและตัวแปรเส้นทางเพื่อกำหนด URL ที่กำหนดเองหรือไดนามิก
โค้ดตัวอย่างเพื่อกำหนดวิธีการร้องขอ HTTP GET แสดงอยู่ด้านล่าง ในตัวอย่างนี้เราใช้ HashMap เพื่อจัดเก็บผลิตภัณฑ์ โปรดทราบว่าเราใช้คลาส POJO เป็นผลิตภัณฑ์ที่จะจัดเก็บ
ที่นี่ URI คำขอคือ /productsและจะส่งคืนรายการผลิตภัณฑ์จากที่เก็บ HashMap ไฟล์คลาสคอนโทรลเลอร์ได้รับด้านล่างซึ่งมี GET method 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);
}
}
POST API
คำขอ HTTP POST ถูกใช้เพื่อสร้างทรัพยากร วิธีนี้มีเนื้อหาการร้องขอ เราสามารถส่งพารามิเตอร์คำขอและตัวแปรเส้นทางเพื่อกำหนด URL ที่กำหนดเองหรือไดนามิก
ตัวอย่างต่อไปนี้แสดงโค้ดตัวอย่างเพื่อกำหนดวิธีการร้องขอ HTTP POST ในตัวอย่างนี้เราใช้ HashMap เพื่อจัดเก็บผลิตภัณฑ์โดยที่ผลิตภัณฑ์เป็นคลาส POJO
ที่นี่ URI คำขอคือ /productsและจะส่งคืน String หลังจากจัดเก็บผลิตภัณฑ์ลงในที่เก็บ 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
คำขอ HTTP PUT ใช้เพื่ออัปเดตทรัพยากรที่มีอยู่ วิธีนี้มีเนื้อหาคำขอ เราสามารถส่งพารามิเตอร์คำขอและตัวแปรเส้นทางเพื่อกำหนด URL ที่กำหนดเองหรือไดนามิก
ตัวอย่างด้านล่างแสดงวิธีกำหนดวิธีการร้องขอ HTTP PUT ในตัวอย่างนี้เราใช้ HashMap เพื่ออัปเดตผลิตภัณฑ์ที่มีอยู่โดยที่ผลิตภัณฑ์เป็นคลาส POJO
URI คำขอคือ /products/{id}ซึ่งจะส่งคืน String หลังผลิตภัณฑ์ไปยังที่เก็บ HashMap โปรดทราบว่าเราใช้ตัวแปร Path{id} ซึ่งกำหนดรหัสผลิตภัณฑ์ที่ต้องอัปเดต
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);
}
}
ลบ API
คำขอ HTTP Delete ใช้เพื่อลบทรัพยากรที่มีอยู่ วิธีนี้ไม่มีเนื้อความคำขอใด ๆ เราสามารถส่งพารามิเตอร์คำขอและตัวแปรเส้นทางเพื่อกำหนด URL ที่กำหนดเองหรือไดนามิก
ตัวอย่างด้านล่างแสดงวิธีกำหนดวิธีการร้องขอ HTTP DELETE ในตัวอย่างนี้เราใช้ HashMap เพื่อลบผลิตภัณฑ์ที่มีอยู่ซึ่งเป็นคลาส POJO
URI คำขอคือ /products/{id}และจะส่งคืน String หลังจากลบผลิตภัณฑ์จากที่เก็บ HashMap เราใช้ตัวแปร Path{id} ซึ่งกำหนดรหัสผลิตภัณฑ์ที่ต้องลบ
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);
}
}
ส่วนนี้จะให้รหัสที่มาทั้งหมดแก่คุณ สังเกตรหัสต่อไปนี้สำหรับฟังก์ชันการทำงานที่เกี่ยวข้อง -
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);
}
}
คุณสามารถสร้างไฟล์ JAR ที่เรียกใช้งานได้และรันแอปพลิเคชัน spring boot โดยใช้คำสั่ง Maven หรือ Gradle ด้านล่างดังที่แสดง
สำหรับ Maven ใช้คำสั่งที่แสดงด้านล่าง -
mvn clean install
หลังจาก“ BUILD SUCCESS” คุณจะพบไฟล์ JAR ภายใต้ไดเร็กทอรีเป้าหมาย
สำหรับ Gradle ใช้คำสั่งที่แสดงด้านล่าง -
gradle clean build
หลังจาก“ BUILD SUCCESSFUL” คุณจะพบไฟล์ JAR ภายใต้ไดเร็กทอรี build / libs
คุณสามารถรันไฟล์ JAR ได้โดยใช้คำสั่งที่แสดงด้านล่าง -
java –jar <JARFILE>
การดำเนินการนี้จะเริ่มแอปพลิเคชันบนพอร์ต Tomcat 8080 ดังที่แสดงด้านล่าง -
ตอนนี้กด URL ที่แสดงด้านล่างในแอปพลิเคชัน POSTMAN และดูผลลัพธ์
GET API URL คือ: http://localhost:8080/products
POST API URL คือ: http://localhost:8080/products
PUT API URL คือ: http://localhost:8080/products/3
DELETE API URL คือ: http://localhost:8080/products/3